RDBMS đa máy chủ hoặc Ứng dụng của tôi có nên xử lý cơ sở dữ liệu toàn vẹn tham chiếu không?


16

Các mục như Khóa ngoại, ràng buộc, Giá trị mặc định, v.v ... phải được xử lý bởi hệ thống quản lý cơ sở dữ liệu (trong trường hợp này là MS SQL 2005) hoặc ứng dụng? Tôi đã nghe ý kiến ​​từ cả hai phía và tôi thực sự không chắc chắn nên đi con đường nào.

Có khả năng chúng tôi sẽ mở rộng nhiều máy chủ / cơ sở dữ liệu và tôi không nghĩ Khóa ngoại có thể được sử dụng trên các máy chủ được liên kết. Ngoài ra, có một số tài liệu tham khảo vòng tròn trong thiết kế cơ sở dữ liệu ngăn tôi sử dụng ON UPDATE CASCADEmọi thứ.

Cơ sở dữ liệu là MS SQL 2005 (có thể là 2008) và tất cả các tương tác với nó sẽ đi qua ứng dụng.


3
Tôi có một cái gì đó để học ở đây vì tôi không thể tưởng tượng được việc không sử dụng RDBMS.
bigtang

Câu trả lời:


10

Nếu có bất kỳ cơ hội nào DB sẽ được sửa đổi bên ngoài ứng dụng của bạn, bạn muốn các ràng buộc trong cơ sở dữ liệu. Nếu DB luôn và sẽ không là gì ngoài phần cuối của ứng dụng, bạn có thể loại bỏ chúng, mặc dù tôi sẽ ghi lại chúng trong trường hợp và có lẽ chỉ cần giữ chúng nếu hiệu năng không quá tệ. (Phần mềm Peoplesoft hoạt động theo cách này - các ràng buộc nằm trong phần mềm và (Tôi không tạo ra điều này), nó chạy mọi thứ như SYS trên Oracle.)

Bạn muốn những thứ như thế được ứng dụng theo dõi, vì vậy nó có thể phản ứng thông minh và không tốt nhất là vẹt lại thông báo lỗi cơ sở dữ liệu cho người dùng.

Và, vâng, đây là phạm vi bảo hiểm gấp đôi, nhưng nếu không có nó, có lẽ bạn sẽ bị hỏng dữ liệu có thể phòng ngừa được hoặc giao diện người dùng xấu.


5

Lý tưởng nhất là cả hai. Bạn không nên không có DB xử lý nó, nhưng sau đó một lần nữa, nếu ứng dụng đi kèm với dữ liệu mà DB sẽ từ chối, đó là một lỗi thời gian chạy, vì vậy ứng dụng nên có ít nhất một số mã dành riêng cho bảo tồn toàn vẹn tham chiếu. Ngoài ra, việc thiết lập các ràng buộc đúng trong SQL trong DB đơn giản hơn nhiều so với thiết lập mã cho phía máy khách, do đó, thực hiện nó trên DB giúp giảm đáng kể khối lượng công việc bạn cần làm.


1

Nếu nó quan trọng, hãy để cơ sở dữ liệu xử lý nó. Bằng cách đó, bạn không phải lo lắng về việc ai đó truy cập cơ sở dữ liệu bên ngoài ứng dụng của bạn và thay đổi hoặc nhập một số dữ liệu không nhất quán hoặc trùng lặp. Trừ khi đó là một số nội dung dành riêng cho ứng dụng cấp cao (như "chỉ người dùng trong bộ phận X có lớp truy cập ZZZ mới được phép thuộc nhóm 999"), nhưng thường không được gọi là tính toàn vẹn "tham chiếu".


1

Tôi sẽ nói đặt trong cơ sở dữ liệu. Nếu bạn đang sử dụng một khung liên tục, Nó sẽ tự động nhận các phím.


1

Cả hai chắc chắn là con đường để đi. Bạn sẽ muốn logic xác thực trong mã của mình để ngăn chặn các cập nhật và chèn xấu cũng như cho người dùng biết lỗi gì và cách khắc phục. Và có cơ sở dữ liệu ở đó để ngăn chặn mọi thứ, vì vậy nếu có thứ gì đó xuất hiện và không chạy qua xác nhận thì nó sẽ không phá vỡ mọi thứ là một điều tốt.

Bạn nên giữ cơ sở dữ liệu ở mức cao hơn. EG, thực thi tích hợp tham chiếu và có lẽ một số không null. Nhưng đừng lo lắng về việc hạn chế độ dài hoặc định dạng vì điều đó được hiển thị tốt nhất cho toàn bộ ứng dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.