Một khung nhìn cần các ràng buộc khóa ngoại của riêng nó?


10

Tuyên bố miễn trừ trách nhiệm: Tôi là một lập trình viên, không phải là một DBA, vì vậy hãy đồng ý với tôi ...

Tôi có một cái nhìn mà tôi sử dụng để chỉ ánh xạ 2 thực thể với nhau. Tôi phải tham gia giữa một vài bảng khác nhau để có được điều đó:

CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS (
SELECT SG.SCREENING_GROUP_ID, V.SITE_ID
FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD
WHERE VD.VISIT_ID = V.VISIT_ID 
AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID);

Trên đây chỉ là cho bối cảnh, đừng lo lắng quá nhiều về điều đó. Điều tôi cần biết là làm thế nào để tạo các trường trong chế độ xem V_SCREENING_GROUP_SITES mới của tôi (SCREENING_GROUP_ID và SITE_ID) hoạt động như các khóa ngoại đối với các bảng SCREENING_GROUP và SITE. Hay nó thậm chí còn quan trọng?

Nếu đó là một cái bàn tôi sẽ làm:

ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...

Nhưng vì đó là một quan điểm rõ ràng là không hoạt động. Tôi không thể tìm thấy cú pháp ALTER VIEW hoạt động để thiết lập FK. Tôi nên làm gì?

(Đây là cơ sở dữ liệu MySQL)

Câu trả lời:


12

Chế độ xem là bảng logic dựa trên một hoặc nhiều bảng vật lý. Nếu có các mối quan hệ khóa ngoài trong các bảng bên dưới, thì chúng sẽ được hiển thị trong dạng xem. Lượt xem hoàn toàn phụ thuộc vào các bảng mà chúng được lấy từ đó, vì vậy cố gắng thêm khóa ngoại vào chúng là không thể.


1
Tuyệt vời, vì vậy tôi không cần phải làm bất cứ điều gì sau đó (các ràng buộc FK đã có trong các bảng bên dưới). Cảm ơn câu trả lời.
Troy

1
Tôi nghĩ rằng đây là điểm để thực hiện. Bạn không cần FK trên màn hình miễn là các bảng bên dưới có FK.
Derek Downey

2
@DTest - Có thể rất hữu ích khi có thể áp dụng các ràng buộc, bao gồm kiểm tra, các ràng buộc khóa duy nhất và khóa ngoài đối với chế độ xem (đặc biệt nếu chế độ xem tổng hợp dữ liệu). Nó chỉ xảy ra rằng không có RDBMS hiện tại nào thực thi các ràng buộc về các khung nhìn ngay cả khi chúng cho phép bạn tạo chúng.
Jack nói hãy thử topanswers.xyz

@JackDoumund Chính xác là đúng! Trong thực tế, tôi đến đây để cố gắng tìm hiểu xem MySQL có hỗ trợ tính năng như vậy không.
Stijn de Witt

3

Theo nghĩa chặt chẽ của từ này, không bạn không thể đặt khóa ngoại trên lượt xem. Đây là lý do tại sao:

InnoDB là công cụ lưu trữ tích hợp duy nhất cho MySQL có các khóa ngoại. Bất kỳ bảng InnoDB nào cũng sẽ được đăng ký trong information_schema.tables với engine = 'InnoDB'.

Lượt xem, trong khi được đăng ký trong information_schema.tables, có công cụ lưu trữ NULL. Không có cơ chế nào trong MySQL để có khóa ngoại trên bất kỳ bảng nào có công cụ lưu trữ không xác định.

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.