Có phải là ý tưởng tồi để tạo khóa ngoại trên các bảng trong một lược đồ khác nhau trong cùng một cơ sở dữ liệu cho các ứng dụng lớn?


13

Tôi đang làm việc về việc chuyển một ứng dụng dựa trên web pl / sql lớn sang máy chủ chuyên dụng. Ứng dụng này nằm trong một lược đồ với 70 gói mã chương trình. Ứng dụng này đã được thực hiện khoảng 15 người trong những thời điểm khác nhau. Và đó là một thực tế bình thường đối với chúng tôi khi tạo các khóa ngoại trên các bảng tham chiếu trong các lược đồ khác nhau vì nó thực sự thuận tiện và giữ cho cơ sở dữ liệu rất sạch sẽ, bởi vì chúng tôi không cần phải giữ các bảng giới thiệu giống nhau trong các lược đồ khác nhau.

Nhưng dù sao thì DBA của tôi (người đã tạo ra cá thể mới với DB và sao chép ứng dụng của tôi bên trong khu Solaris) đã nói rất gay gắt ngày hôm nay, "Khóa ngoại trên các lược đồ khác nhau là xấu và bạn cần phải phá hủy nó!". Ông không giải thích quan điểm của mình.

Có thực sự xấu khi làm điều đó với một ứng dụng lớn?


13
DBA của bạn nên bị sa thải.
Colin 't Hart

1
Tất cả chúng ta sẽ hét lên rằng DBA của bạn là một kẻ ngu ngốc nếu đó là tất cả những gì họ nói, nhưng bạn có chắc chắn không có bối cảnh nào khác trong cuộc tranh luận về DBA của bạn không?
Kermit

1
có lẽ DBA chỉ đang làm tốt nhất có thể để hỗ trợ công việc lố bịch mà các nhà phát triển đã làm trong việc xây dựng điều này.
swasheck

2
@swasheck Mặt khác, bạn có muốn có công việc của anh ấy sau khi cơ sở dữ liệu đã tích lũy nhiều năm không thống nhất theo DBA này không?
Twinkles 10/12/13

@Twinkles hoàn toàn không
swasheck

Câu trả lời:


6

Bearwith me - Tôi đến từ SQL Server và ghét nhà tiên tri, nhưng tôi nghĩ rằng cuộc tranh luận vẫn đứng vững.

Lược đồ là tốt để cô lập các bảng từ các hệ thống con logic. Khóa ngoại đảm bảo tính toàn vẹn dữ liệu. Đây là những khái niệm trực giao - vì rõ ràng tính toàn vẹn dữ liệu giữa các hệ thống con cũng là điều bắt buộc. Kế toán và vận chuyển và có thể cả dữ liệu CUstome trung tâm không sống trong các silo nơi khách hàng có thể bị xóa trong khi được sử dụng trong kế toán.

Như vậy, tôi nghĩ rằng yêu cầu của DBA là một dấu hiệu của sự bất tài. Xin vui lòng bất cứ ai có thể bước vào và cung cấp một đối số - tôi sẽ rất vui. Nhưng đây là cách tôi thực hiện trên SQL Server (mặc dù, một lần nữa, định nghĩa lược đồ của chúng tôi là IIRC một LITTLE khác với định nghĩa orory).


4

Mặc dù yêu cầu phá hủy các ràng buộc khóa ngoại mà không có lý do chi tiết là ngu ngốc, nhưng vẫn có ý nghĩa để giữ các tài liệu tham khảo bên ngoài trong tầm kiểm soát. Điều gì xảy ra nếu các lược đồ bạn đang tham chiếu được đặt tên khác trên máy chủ mới của bạn?

Trong Oracle, bạn giải quyết vấn đề này bằng cách tạo ra SYNONYMS cho các đối tượng nằm ngoài lược đồ hiện tại.


1
Bạn có thể lạm dụng các từ đồng nghĩa và làm vẩn đục thêm câu hỏi "cái này đề cập đến cái gì?". Xem tại đây để biết thêm chi tiết về bảo mật, hiệu suất và thực tiễn tốt nhất stackoverflow.com/a/10042117/851930
kevinsky

3
Từ đồng nghĩa không thể được sử dụng làm mục tiêu của các ràng buộc khóa ngoài.
Colin 't Hart

Điểm hợp lệ. Và thêm bằng chứng rằng việc đưa ra tuyên bố mà không cho người khác một cơ hội để tranh luận về công đức và nguy hiểm là xấu.
Twinkles 10/12/13

2

Nếu bạn có nhu cầu (không gian / bảo mật / bất cứ điều gì) để di chuyển bất kỳ lược đồ nào sang cơ sở dữ liệu khác, bạn sẽ không thể xử lý các tham chiếu nữa. Đó có lẽ là lý do chính để yêu cầu giết các tài liệu tham khảo.


0

"Ý tưởng tồi" duy nhất mà tôi có thể tưởng tượng khi thực hiện điều này, là bạn không thể cấp đặc quyền đối tượng TÀI LIỆU THAM KHẢO (cái cần thiết để tạo một ràng buộc đề cập đến một bảng) cho một vai trò. Tôi phải thực hiện lược đồ / người dùng theo lược đồ / người dùng.

Ngoài ra, tôi không thấy điểm DBA của bạn.


0

Chỉ cần nghĩ về điều này: Lược đồ chủ sở hữu bảng con bắt đầu tạo bản ghi trong bảng của nó và vô tình ngăn người dùng lược đồ bảng cha xóa các bản ghi khỏi bảng cha. Nó có phải là một cái gì đó nó dự đoán và đánh giá cao?

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.