Bir görüşün kendi yabancı anahtar kısıtlamalarına ihtiyacı var mı?


10

Feragatname: Ben bir programcıyım, DBA değil, bu yüzden bana katlan ...

Sadece 2 varlığı birlikte eşlemek için kullandığım bir görüşüm var. Bunu elde etmek için birkaç farklı tablo arasında bir katılmak zorunda:

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);

Yukarıda sadece bağlam için, bu konuda fazla endişelenme. Bilmem gereken şey, yeni V_SCREENING_GROUP_SITES görünümümdeki alanları (SCREENING_GROUP_ID ve SITE_ID) SCREENING_GROUP ve SITE tablolarına yabancı anahtarlar olarak nasıl davranacağımdır. Yoksa önemi var mı?

Bir tablo olsaydı ben yapardım:

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

Ancak bu, işe yaramadığı bir görüş olduğu için. FK'leri ayarlamak için çalışan bir ALTER VIEW sözdizimi bulamadım. Ne yapmalıyım?

(Bu bir MySQL Veritabanı)

Yanıtlar:


12

Görünüm, bir veya daha fazla fiziksel tabloyu temel alan mantıksal bir tablodur. Altta yatan tablolarda yabancı anahtar ilişkiler varsa, bunlar görünümde ortaya çıkacaktır. Görünümler tamamen türetildikleri tablolara bağlıdır, bu nedenle bunlara yabancı anahtarlar eklemeye çalışmak mümkün değildir.


1
Harika, bu yüzden hiçbir şey yapmanıza gerek yok (FK tabloları zaten altta yatan tablolarda). Cevap için teşekkürler.
Troy

1
Sanırım bu nokta. Altta yatan tablolarda FK'ler olduğu sürece görünümde FK'lere ihtiyacınız olmamalıdır.
Derek Downey

2
@DTest - Bir görünüme kontrol, benzersiz ve yabancı anahtar kısıtlamaları da dahil olmak üzere kısıtlamaları uygulamak (özellikle görünüm verileri topluyorsa) çok yararlı olabilir. Sadece mevcut RDBMS'lerin, görünümleri oluşturmanıza izin verseler bile görünümlerde kısıtlama uygulamadığı görülür.
Jack diyor ki topanswers.xyz

@JackDouglas Kesinlikle doğru! Aslında buraya MySQL'in böyle bir özelliği destekleyip desteklemediğini öğrenmeye geldim.
Stijn de Witt

3

Kelimenin tam anlamıyla, hayır görünümler üzerinde yabancı anahtarlar ayarlayamazsınız. İşte nedeni:

InnoDB, MySQL için yabancı anahtarlara sahip tek yerleşik depolama motorudur. Herhangi bir InnoDB tablosu, engine = 'InnoDB' ile information_schema.tables dosyasına kaydedilecektir.

Görünümler, information_schema.tables dosyasına kaydedildiklerinde NULL bir depolama motoruna sahiptir. MySQL'de tanımlanmamış bir depolama motoruna sahip herhangi bir tabloda yabancı anahtar bulunmasına yönelik bir mekanizma yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.