Rõ ràng là bạn đang đề xuất rằng CONSTRAINT
s trong cơ sở dữ liệu nên được thi hành bởi (các) ứng dụng mà truy cập cơ sở dữ liệu đó?
Có nhiều lý do tại sao đây là một ý tưởng tồi (xấu, xấu ...).
1) Nếu bạn đang xây dựng một công cụ "ràng buộc" của riêng bạn (tức là trong mã ứng dụng của bạn), thì bạn chỉ đang mô phỏng những gì Oracle / SQL Server / MySQL / PostgreQuery / <. Anyever ...> đã chi năm viết. Mã CONSTRAINT của họ đã được kiểm tra trong những năm qua bởi hàng triệu người dùng cuối.
2) Với tất cả sự tôn trọng dành cho bạn và nhóm của bạn, bạn sẽ không làm cho đúng ngay cả trong vài năm - kể từ đây , chỉ riêng mã MySQL đã có giá 40 triệu đô la. Và MySQL là máy chủ rẻ nhất trong số 3 máy chủ ở trên và thậm chí họ không triển khai KIỂM TRA CONSTRAINT. Rõ ràng, có được RI (Toàn vẹn tham chiếu) hoàn toàn đúng là khó khăn.
Tôi thường xuyên sử dụng các diễn đàn của Oracle và tôi không thể nói cho bạn biết số lần mà một số người quản lý / lập trình viên nghèo đã có một dự án thúc đẩy anh ta, nơi thiên tài có công việc của anh ta trước đây có ý tưởng "sáng suốt" về những gì bạn đề xuất .
Jonathan Lewis (ông đã viết một cuốn sách 550 trang về các nguyên tắc cơ bản của trình tối ưu hóa Oracle ) là không. 2 trong số Thảm họa thiết kế của ông trong một cuốn sách khác (" Tales of the Oak Table " - Bàn Oak là một nhóm các chuyên gia của Oracle) là
- Chúng tôi sẽ kiểm tra tính toàn vẹn dữ liệu ở cấp ứng dụng thay vì tận dụng các khả năng kiểm tra ràng buộc của Oracle.
3) Ngay cả khi bằng một phép lạ nào đó bạn có thể thực hiện RI một cách chính xác, bạn sẽ phải thực hiện lại hoàn toàn nó hết lần này đến lần khác cho mọi ứng dụng chạm vào cơ sở dữ liệu đó - và nếu dữ liệu của bạn là quan trọng, thì các ứng dụng mới sẽ. Chọn điều này như một mô hình sẽ dẫn bạn và các lập trình viên đồng nghiệp của bạn (không đề cập đến nhân viên hỗ trợ và bán hàng) đến một cuộc sống liên tục chữa cháy và đau khổ.
Bạn có thể đọc thêm về lý do tại sao triển khai CONSTRAINT dữ liệu ở cấp ứng dụng không có gì là điên rồ ở đây , đây và đây .
Để trả lời cụ thể câu hỏi của bạn:
Tại sao họ lại tuyên bố? Nó có vẻ rất hữu ích, nhưng thực sự cần thiết phải có một cơ sở dữ liệu có chức năng
Lý do mà KEY
s (hoặc PRIMARY
, FOREIGN
, UNIQUE
hay chỉ là bình thường INDEX
es) được khai báo là, trong khi nó là không nghiêm chỉnh cần thiết cho một cơ sở dữ liệu để họ có cho nó hoạt động, nó là hoàn toàn cần thiết cho họ để được khai báo cho nó chức năng tốt .