He trabajado bastante con bases de datos relacionales y creo que entiendo bastante bien los conceptos básicos del buen diseño de esquemas. Recientemente tuve la tarea de asumir un proyecto en el que el DB fue diseñado por un consultor altamente remunerado. Por favor, avíseme si mi intestino está en contacto - "¡¿WTF ??!?" - está garantizado, o este tipo es tan genio que está operando fuera de mi reino?
DB en cuestión es una aplicación interna utilizada para ingresar solicitudes de los empleados. Con solo mirar una pequeña sección, tiene información sobre los usuarios e información sobre la solicitud que se realiza. Yo diseñaría esto así:
Tabla de usuario:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Tabla de solicitud
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Simple, verdad?
El consultor lo diseñó así (con datos de muestra):
Tabla de usuarios
UserID FirstName LastName
234 John Doe
516 Jane Doe
123 Foo Bar
DepartamentosTable
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
La base de datos completa está construida de esta manera, con cada pieza de datos encapsulada en su propia tabla, con ID numéricos que unen todo. Al parecer, el consultor había leído sobre OLAP y quería la "velocidad de las búsquedas de enteros"
También tiene una gran cantidad de procedimientos almacenados para hacer referencia cruzada a todas estas tablas.
¿Es este diseño válido para una base de datos SQL pequeña a mediana?
Gracias por comentarios / respuestas ...