Wykonałem sporo pracy z relacyjnymi bazami danych i myślę, że całkiem dobrze rozumiem podstawowe koncepcje dobrego projektowania schematów. Niedawno miałem za zadanie przejąć projekt, w którym DB zaprojektował wysoce opłacany konsultant. Daj mi znać, jeśli mój instynkt jelitowy - „WTF ??!?” - jest uzasadniony, czy ten facet jest tak genialny, że działa poza moim królestwem?
DB, o której mowa, to wewnętrzna aplikacja służąca do wprowadzania żądań od pracowników. Wystarczy spojrzeć na jego niewielką część, aby uzyskać informacje o użytkownikach i informacje o złożonym żądaniu. Zaprojektowałbym to tak:
Tabela użytkowników:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Tabela zapytań
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Proste, prawda?
Konsultant zaprojektował to tak (z przykładowymi danymi):
UsersTable
UserID FirstName LastName
234 John Doe
516 Jane Doe
123 Foo Bar
DepartmentsTable
DepartmentID Name
1 Sales
2 HR
3 IT
UserDepartmentTable
UserDepartmentID UserID Department
1 234 2
2 516 2
3 123 1
RequestTable
RequestID UserID <...>
1 516 blah
2 516 blah
3 234 blah
Cała baza danych jest zbudowana w ten sposób, a każdy kawałek danych jest zamknięty w swojej własnej tabeli, z numerycznymi identyfikatorami łączącymi wszystko razem. Najwyraźniej konsultant czytał o OLAP i chciał „szybkości wyszukiwania liczb całkowitych”
Ma również dużą liczbę procedur przechowywanych, aby odwołać się do wszystkich tych tabel.
Czy jest to poprawny projekt dla małej lub średniej bazy danych SQL?
Dzięki za komentarze / odpowiedzi ...