Ho svolto un bel po 'di lavoro con i database relazionali e penso di capire abbastanza bene i concetti di base del buon schema. Recentemente ho avuto il compito di rilevare un progetto in cui il DB è stato progettato da un consulente altamente pagato. Per favore fatemi sapere se il mio istinto intestinale - "WTF ??!?" - è giustificato, o questo ragazzo è un genio che sta operando fuori dal mio regno?
Il DB in questione è un'app interna utilizzata per immettere richieste dai dipendenti. Basta guardare una piccola parte di esso, si dispone di informazioni sugli utenti e informazioni sulla richiesta effettuata. Lo disegnerei in questo modo:
Tabella utente:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Tabella richieste
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Semplice, vero?
Il consulente l'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 su OLAP e voleva la "velocità delle ricerche per interi"
Ha anche un gran numero di stored procedure per fare riferimento a tutte queste tabelle.
Questa progettazione valida è per un DB SQL di piccole e medie dimensioni?
Grazie per i commenti / le risposte ...