2012-11-11 20 views
5

Eski bir veritabanına gittim ve bir sütunu kendisine referans gösteren birkaç yabancı anahtar buldum. Başvurulan sütun birincil anahtar sütundur.Kendine referans veren yabancı anahtarın anlamı nedir?

ALTER TABLE [SchemaName].[TableName] WITH CHECK ADD 
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id]) 
REFERENCES [SchemaName].[TableName] ([Id]) 

Bunun anlamı nedir?

cevap

14
ALTER TABLE [SchemaName].[TableName] WITH CHECK ADD 
CONSTRAINT [FK_TableName_TableName] FOREIGN KEY([Id]) 
REFERENCES [SchemaName].[TableName] ([Id]) 

Bu yabancı anahtar tamamen gereksiz ve anlamsız olarak silin. Kısıtlamanın geçerliliğini onaylayan bir eşleşme olarak asla ihlal edilemez. ilişki iki farklı sütunlar (örn Id ve ParentId) sağ "Keys" tıklarsanız görsel tasarımcı kullanımı yoluyla oldukça muhtemel oluşturulmuş olabilir neden gelince

arasında olacağını hiyerarşik tabloda

Nesne gezginde düğüm ve "Yeni Yabancı Anahtar" ı seçin, daha sonra oluşturulan yabancı anahtarı silmeden diyalog kutusunu kapatın ve daha sonra açılan tablo tasarımcısında bazı değişiklikler yapın ve bu tür bir gereksiz kısıtlama yaratacaktır.

+1

Ben de öyle düşündüm. Hatta bunun mümkün olduğuna şaşırdım. – HuBeZa

-7

Bazı durumlarda, bu modelinizde fazlalıkları azaltmanın tercih edilen bir yoludur. Kendi kendini referans alan yabancı anahtarı kullanırken (örneğin size gösterildiği gibi), tablonuzdaki satırlar arasında hiyerarşik bir ilişki yaratırsınız. Tablodaki bir satırı sildiğinizde, silme işleminin devam ettiği satırların hala istediğiniz satırları kaldırabileceğine dikkat edin. Bu tür anahtarları kullanmak, veri doğrulama işleminin bir kısmını programın/programlayıcının sorumluluğunda yapmak yerine DB modeline taşır. Bazı kıyafetler bu tarz şeyler yapmayı tercih eder. Programların ve programcıların sorumlu olduğundan emin olmayı tercih ediyorum - veri modellerinin üretim ortamlarında yeniden düzenlenmesi ve yükseltilmesi zor olabilir.

+7

Referans, aynı sütun arasında. Bu hiyerarşik bir ilişki olarak pek işe yaramıyor. –

İlgili konular