Penafian: Saya seorang programmer, bukan DBA, jadi bersabarlah ...
Saya memiliki pandangan yang saya gunakan untuk hanya memetakan 2 entitas bersama-sama. Saya harus melakukan gabungan antara beberapa tabel berbeda untuk mendapatkan itu:
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);
Di atas hanya untuk konteks, jangan terlalu khawatir tentang itu. Yang perlu saya ketahui adalah bagaimana membuat bidang dalam tampilan V_SCREENING_GROUP_SITES saya yang baru (SCREENING_GROUP_ID dan SITE_ID) berlaku sebagai kunci asing ke SCREENING_GROUP dan tabel SITE. Atau apakah itu penting?
Jika itu meja saya akan lakukan:
ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...
Tapi karena itu pandangan yang jelas tidak berhasil. Saya tidak dapat menemukan sintaks ALTER VIEW yang berfungsi untuk mengatur FK. Apa yang harus saya lakukan?
(Ini adalah Database MySQL)
sumber
Dalam arti kata yang ketat, tidak, Anda tidak dapat mengatur kunci asing pada tampilan. Inilah alasannya:
InnoDB adalah satu-satunya mesin penyimpanan built-in untuk MySQL yang menampilkan kunci asing. Setiap tabel InnoDB akan didaftarkan di information_schema.tables dengan engine = 'InnoDB'.
Tampilan, saat terdaftar di information_schema.tables, memiliki mesin penyimpanan NULL. Tidak ada mekanisme di MySQL untuk memiliki kunci asing di atas meja apa pun yang memiliki mesin penyimpanan yang tidak ditentukan.
sumber