Podczas jednej z ostatnich lekcji na uniwersytecie (jestem studentem) wykładowca poprosił nas o opracowanie bazy danych (jeśli ma to znaczenie MySQL Server) i małej aplikacji klienckiej, która wykorzystywałaby bazę danych jako źródło danych.
Jednym z wymagań było to, że kolumna tożsamości (która jest PK w każdej tabeli) musi być sekwencyjna, ponieważ jest to dobra praktyka (jak na słowa wykładowcy). Oznacza to, że po usunięciu wiersza tabeli jego PK musi być ponownie użyte w kolejnych wstawkach. Mam średnią wiedzę na temat RDBMS, PK i kolumn tożsamości. Z tego, co rozumiem, ta kolumna tożsamości to tylko sposób, aby DB automatycznie generował PK podczas wstawiania wierszy i nic więcej. A wartość kolumny tożsamości nie powinna być w żaden sposób powiązana z atrybutami wiersza (o ile nie jest to klucz naturalny).
Ten wymóg (ściśle sekwencyjna kolumna tożsamości) był dla mnie podejrzany. Próbowałem zapytać prowadzącego, co jest nie tak, jeśli tożsamość nie jest sekwencyjna (z lukami spowodowanymi usunięciem), ale otrzymałem bardzo abstrakcyjną odpowiedź, taką jak: „jest wygodny dla użytkowników i przydatny dla administratorów DB, którzy utrzymują bazę danych”. Brak konkretnych przykładów. Argument „wygodny dla użytkowników” brzmi głupio, ponieważ nie ma żadnego znaczenia w domenie biznesowej.
Dlatego jestem ciekawy, czy te powody są prawdziwe? Mogę wymyślić tylko jeden przypadek, w którym wymagane jest zresetowanie kolumny tożsamości - gdy przestrzeń tożsamości jest wyczerpana. Jest to jednak większy problem projektowy, gdy typ kolumny tożsamości został nieprawidłowo wybrany, powiedzmy prosty int
zamiast bigint
lub uniqueidentifier
gdy tabela zawiera miliardy wierszy. Załóżmy, że kolumna tożsamości jest indeksem klastrowym: czy luki w kolumnie tożsamości mogą wpływać na wydajność indeksu? Może istnieją inne rzeczywiste powody automatycznego ponownego inicjowania kolumny tożsamości po każdym usunięciu, o którym nie wiem?
Z góry dziękuję!
źródło