Tại sao các ràng buộc được áp dụng trong Cơ sở dữ liệu? Nó sẽ không linh hoạt hơn để đặt nó trong mã?
Tôi đang đọc một cuốn sách dành cho người mới bắt đầu triển khai cơ sở dữ liệu, vì vậy tôi đang hỏi đây là người mới bắt đầu. Giả sử tôi đã thiết kế một cơ sở dữ liệu, bao gồm mô hình thực thể này:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Các ràng buộc hiện tại:
- Một người đã đăng ký trên hệ thống chỉ có thể là Sinh viên hoặc Nhân viên.
- Thực thể cá nhân đòi hỏi tính duy nhất của số xã hội, mà chúng tôi cho rằng mỗi người chỉ giữ một số duy nhất (hay còn gọi là khóa chính đủ tốt ). (xem # 1)
Sau đó, chúng tôi quyết định loại bỏ số 1: Nếu một ngày, trường đại học quyết định rằng Teacher
(loại Employee
phụ) cũng có thể Student
, tham gia các khóa học trong thời gian rảnh, việc thay đổi thiết kế cơ sở dữ liệu có thể có hàng ngàn, hàng triệu, hàng tỷ, hàng trăm mục thay vì chỉ thay đổi logic trong mã: chỉ là phần không cho phép một người được đăng ký cả khi là sinh viên và nhân viên.
(Điều đó rất không thể nhưng tôi không thể nghĩ gì khác ngay bây giờ. Rõ ràng là có thể).
Tại sao chúng ta quan tâm đến các quy tắc kinh doanh trong thiết kế cơ sở dữ liệu hơn là trong mã?
# 1: Một lưu ý 7 năm sau, một ví dụ thực tế:
Tôi đã thấy một chính phủ vì một sai lầm, các SSN được ban hành đã bị trùng lặp: nhiều người, cùng một SSN. Những người thiết kế DB ban đầu chắc chắn đã mắc sai lầm khi không áp dụng ràng buộc duy nhất này trong cơ sở dữ liệu. (và sau đó là một lỗi trong ứng dụng gốc? nhiều ứng dụng sử dụng cơ sở dữ liệu dùng chung và không đồng ý đặt ở đâu, kiểm tra và thực thi các ràng buộc? ...).
Lỗi này sẽ tồn tại trong hệ thống và tất cả hệ thống được phát triển sau đó dựa vào cơ sở dữ liệu của hệ thống ban đầu đó, trong nhiều năm tới. Đọc các câu trả lời ở đây tôi đã học cách áp dụng tất cả các ràng buộc, càng nhiều trong số chúng càng tốt, một cách khôn ngoan (không mù quáng) trong cơ sở dữ liệu để thể hiện thế giới thực ngoài kia tốt nhất có thể.