Ho svolto un bel po 'di lavoro con i database relazionali e penso di aver capito abbastanza bene i concetti di base della buona progettazione di schemi. Di recente mi è stato affidato il compito di rilevare un progetto in cui il DB era stato progettato da un consulente ben pagato. Per favore fatemi sapere se il mio intestino - "WTF ??!?" - è garantito, o è un tale genio che sta operando fuori dal mio regno?
DB in questione è un'app interna utilizzata per inserire richieste dai dipendenti. Solo guardando una piccola sezione di esso, hai informazioni sugli utenti e informazioni sulla richiesta che viene effettuata. Lo progetterei così:
Tabella utente:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Tabella richiesta
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Semplice vero?
Il consulente lo ha progettato in questo modo (con dati di esempio):
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
L'intero database è costruito in questo modo, con ogni pezzo di dati incapsulato nella propria tabella, con ID numerici che collegano tutto insieme. Apparentemente il consulente aveva letto di OLAP e voleva la "velocità delle ricerche intere"
Ha anche un gran numero di procedure memorizzate per incrociare tutte queste tabelle.
Questo design è valido per un database SQL di piccole e medie dimensioni?
Grazie per commenti / risposte ...