He trabajado bastante con bases de datos relacionales, y creo que entiendo bastante bien los conceptos básicos de un buen diseño de esquema. Recientemente me encargaron la tarea de asumir un proyecto en el que el DB fue diseñado por un consultor altamente pagado. Por favor, hágame saber si mi intuición es "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 que se usa para ingresar solicitudes de empleados. Con solo mirar una pequeña sección, tiene información sobre los usuarios e información sobre la solicitud que se está realizando. Yo diseñaría esto así:
Tabla de usuarios:
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ñó de esta manera (con datos de muestra):
UsersTable
UserID FirstName LastName
234 John Doe
516 Jane Doe
123 Foo Bar
Tabla de departamentos
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 se construye así, con cada pieza de datos encapsulada en su propia tabla, con las identificaciones numéricas que vinculan 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 una referencia cruzada de todas estas tablas.
¿Es este diseño válido para una base de datos SQL de tamaño pequeño a mediano?
Gracias por los comentarios / respuestas ...