2010-01-19 39 views
34

Tôi đã cố gắng tạo khóa ngoài trên một trong các bảng của tôi, tham chiếu cột của một bảng trong một lược đồ khác.Tham chiếu khóa ngoài tới bảng trong lược đồ khác

Something như thế:

ALTER TABLE my_schema.my_table ADD (
    CONSTRAINT my_fk 
    FOREIGN KEY (my_id) 
    REFERENCES other_schema.other_table(other_id) 
) 

Kể từ khi tôi đã có các khoản tài trợ cần thiết, điều này làm việc tốt.

Bây giờ tôi tự hỏi liệu có lý do nào để không tham chiếu các bảng trong một lược đồ khác hoặc bất kỳ điều gì cần phải cẩn thận không?

Trả lời

32

Không có sự cố khi thực hiện việc này. Schema thực sự không có tác động khi thiết lập mối quan hệ khóa ngoài giữa các bảng. Chỉ cần đảm bảo rằng những người thích hợp có các quyền cần thiết cho lược đồ bạn định sử dụng.

0

Một lý do có thể gây ra sự cố là bạn cần phải cẩn thận để xóa mọi thứ theo đúng thứ tự. Điều này có thể tốt hay xấu tùy thuộc vào mức độ quan trọng của việc không bao giờ có trẻ mồ côi trong các bảng của bạn.

+1

Vâng, nhưng điều này giống nhau khi tham chiếu một bảng trong lược đồ của tôi. Đúng? –

+0

Có, nó giống nhau. Đó là một cái gì đó phải cẩn thận, mặc dù –

4

Điều này sẽ hoạt động chính xác như khóa ngoài tham chiếu bảng trong lược đồ riêng của nó.

Như với khóa ngoài thông thường, đừng quên lập chỉ mục my_id nếu khóa cha được cập nhật hoặc nếu bạn xóa các mục nhập khỏi bảng cha (các khóa ngoài không lập chỉ mục có thể là nguồn gây tranh chấp lớn và chỉ mục thường hữu ích dù sao).

4

Điều duy nhất tôi gặp phải là đảm bảo sự cho phép tồn tại trên lược đồ khác. Những thứ thông thường - nếu những (các) giấy phép đó biến mất vì bất kỳ lý do gì, bạn sẽ nghe về nó.

2

Nếu bạn đang ở trong một tổ chức mà những người khác nhau có thẩm quyền đối với các lược đồ khác nhau, tôi nghĩ thực hành tốt là cung cấp cho lược đồ khác khả năng vô hiệu hóa, hoặc thậm chí thả và tạo lại, hạn chế của bạn.

Ví dụ: họ có thể cần phải cắt hoặc cắt bớt bảng của họ và sau đó tải lại để xử lý một số vấn đề hỗ trợ (rất lạ). Trừ khi bạn muốn được gọi vào giữa đêm, tôi khuyên bạn nên cho họ khả năng tạm thời loại bỏ ràng buộc của bạn. (Tôi cũng khuyên bạn nên thiết lập cảnh báo của riêng bạn để bạn biết nếu có bất kỳ ràng buộc bên ngoài nào của bạn bị vô hiệu hóa hoặc bị loại bỏ). Khi bạn đang chuyển các dòng tổ chức/lược đồ, bạn muốn chơi tốt với những người khác. Chỉ số mà Vincent đề cập là một phần khác của điều đó.

Các vấn đề liên quan