Я проделал немалую работу с реляционными базами данных и думаю, что довольно хорошо понимаю основные концепции хорошего проектирования схем. Недавно мне была поручена работа над проектом, в котором БД был разработан высокооплачиваемым консультантом. Пожалуйста, дайте мне знать, если мой внутренний инстинкт - "WTF ??!?" - гарантированно, или этот парень такой гений, что действует из моего царства?
БД, о которой идет речь, - это собственное приложение, используемое для ввода запросов от сотрудников. Просто глядя на небольшой раздел, у вас есть информация о пользователях, а также информация о выполняемом запросе. Я бы разработал это так:
Таблица пользователей:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Запросить таблицу
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Просто, правда?
Консультант разработал это так (с примерами данных):
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
Вся база данных построена следующим образом, каждая часть данных инкапсулирована в свою собственную таблицу с числовыми идентификаторами, связывающими все вместе. По-видимому, консультант читал об OLAP и хотел получить «скорость целочисленных поисков».
У него также есть большое количество хранимых процедур для перекрестной ссылки на все эти таблицы.
Это допустимый дизайн для базы данных SQL малого и среднего размера?
Спасибо за комментарии / ответы ...