Apakah pandangan memerlukan batasan kunci asingnya sendiri?

10

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)

Troy
sumber

Jawaban:

12

Tampilan adalah tabel logis yang didasarkan pada satu atau lebih tabel fisik. Jika ada hubungan kunci asing di tabel yang mendasarinya, maka mereka akan dimanifestasikan dalam tampilan. Tampilan sepenuhnya bergantung pada tabel asal mereka, jadi tidak mungkin untuk menambahkan kunci asing.

gview
sumber
1
Bagus, jadi saya tidak perlu melakukan apa-apa (kendala FK sudah ada di tabel yang mendasari). Terima kasih atas jawabannya.
Troy
1
Saya pikir inilah intinya. Anda seharusnya tidak membutuhkan FK pada tampilan selama tabel yang mendasari memiliki FK.
Derek Downey
2
@Dest - Ini bisa sangat berguna untuk dapat menerapkan kendala, termasuk cek, batasan kunci asing dan unik ke tampilan (terutama jika tampilan mengumpulkan data). Kebetulan RDBMS saat ini tidak memberlakukan batasan pada pandangan bahkan jika mereka memungkinkan Anda untuk membuatnya.
Jack bilang coba topanswers.xyz
@JackDouglas Tepat sekali! Sebenarnya saya datang ke sini mencoba mencari tahu apakah MySQL mendukung fitur semacam itu.
Stijn de Witt
3

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.

RolandoMySQLDBA
sumber