Tôi có ba bảng, hãy gọi cho họ GRANDPARENT
, PARENT
và CHILD
. PARENT
có cột FK để PK của GRANDPARENT
và CHILD
có cột FK để PK của PARENT
. Càng xa càng tốt.Cách thiết lập chế độ xem có thể cập nhật bằng cách tham gia Firebird?
Bây giờ tôi muốn thiết lập chế độ xem chứa tất cả thông tin trong CHILD
, cộng với PK từ GRANDPARENT
. Vì vậy:
CREATE VIEW CHILD_VIEW
(
ID,
PARENT_ID,
OTHER_STUFF,
GRANDPARENT_ID
)
AS
SELECT
C.ID,
C.PARENT_ID,
C.OTHER_STUFF,
C.GRANDPARENT_ID
FROM CHILD C
join PARENT P on P.ID = C.PARENT_ID;
Không quá khó. Nhưng đây là phần phức tạp: Tôi muốn có thể INSERT
hoặc UPDATE
cho chế độ xem này và có tất cả dữ liệu có liên quan được ghi vào bảng CHILD
và giá trị GRANDPARENT_ID
, nếu có, sẽ bị bỏ qua.
Tôi đã thực hiện một số Googling và dường như có thể thiết lập chế độ xem có thể cập nhật như thế này "bằng cách sử dụng trình kích hoạt", nhưng nó không giải thích bất cứ nơi nào tôi phải làm với trình kích hoạt để đạt được hiệu ứng này. Tôi nghĩ rằng tôi biết nhiều hơn hoặc ít hơn làm thế nào để xử lý các trường hợp INSERT
, nhưng những gì về trường hợp UPDATE
? Các tuyên bố UPDATE
có điều khoản WHERE
và có thể chứa hoặc không chứa bất kỳ cột tùy ý nào trong bảng.
Ví dụ: làm cách nào để sử dụng trình kích hoạt để biến đổi một cái gì đó như update CHILD_VIEW set (blah blah blah) where ID = 5
thành update CHILD set (blah blah blah excluding GRANDPARENT_ID) where ID = 5
?
Tốt câu hỏi này về 'cái UPDATE' chỉ một số cột ... AFAIK không có cách nào để phát hiện các cột nào được bao gồm trong câu lệnh 'UPDATE' gây ra kích hoạt' ON UPDATE' để kích hoạt. Tôi nghĩ rằng đây là giá trị yêu cầu tính năng trong trình theo dõi Firebird, nếu chưa có. – ain
Không nên trong mã của bạn 'C.GRANDPARENT_ID' là' P.GRANDPARENT_ID'? – EMBarbosa
không có chế độ xem nhiều bảng 'INSERT' /' UPDATE's? booooo! –