Tôi đã thực hiện một chút công việc với các cơ sở dữ liệu quan hệ và nghĩ rằng tôi hiểu các khái niệm cơ bản của thiết kế lược đồ tốt khá tốt. Gần đây tôi được giao nhiệm vụ tiếp quản một dự án trong đó DB được thiết kế bởi một nhà tư vấn được trả lương cao. Xin vui lòng cho tôi biết nếu ruột của tôi - "WTF ??!?" - được bảo hành, hay anh chàng này là một thiên tài mà anh ta hoạt động ra khỏi vương quốc của tôi?
DB trong câu hỏi là một ứng dụng nội bộ được sử dụng để nhập yêu cầu từ nhân viên. Chỉ cần nhìn vào một phần nhỏ của nó, bạn có thông tin về người dùng và thông tin về yêu cầu được đưa ra. Tôi sẽ thiết kế như thế này:
Bảng người dùng:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Bảng yêu cầu
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Đơn giản phải không?
Tư vấn đã thiết kế nó như thế này (với dữ liệu mẫu):
Người dùng
UserID FirstName LastName
234 John Doe
516 Jane Doe
123 Foo Bar
Bộ phận
DepartmentID Name
1 Sales
2 HR
3 IT
UserDepidorTable
UserDepartmentID UserID Department
1 234 2
2 516 2
3 123 1
RequestTable
RequestID UserID <...>
1 516 blah
2 516 blah
3 234 blah
Toàn bộ cơ sở dữ liệu được xây dựng như thế này, với mỗi phần dữ liệu được gói gọn trong bảng riêng của nó, với ID số liên kết mọi thứ với nhau. Rõ ràng nhà tư vấn đã đọc về OLAP và muốn 'tốc độ tra cứu số nguyên'
Ông cũng có một số lượng lớn các thủ tục được lưu trữ để tham chiếu chéo tất cả các bảng này.
Đây có phải là thiết kế hợp lệ cho SQL DB cỡ nhỏ đến trung bình không?
Cảm ơn đã cho ý kiến / câu trả lời ...