2013-02-12 8 views
5

Bir MySQL veritabanı kullanıyorum. İlişkisel veri modelimde, 1: 1'i birbirine bağlayan iki varlığım var. Şemamda, iki tablodan birinde FK tablosunu diğer tablodaki PK ile ilişkilendirerek 1: 1 bir ilişki kurulur. Her iki tablonun da PK'leri var ve her ikisi de otomatik artış BIGINTs.1: 1 ilişkisinde iki yönlü yabancı anahtar kısıtlaması

Onlara her iki yönde çalışan bir ON DELETE CASCADE davranışı olup olmadığını merak ediyorum.

Örneğin, 1: 1 B, [A'yı da silmek B] 'nin yanı sıra [Silme ayrıca A'yı siler] anlamına gelir.

Bunun doğru uygulama tasarımı açısından kesinlikle gerekli olmayabileceğinin farkındayım, ancak bunun gerçekten mümkün olup olmadığını merak ediyorum. Hatırladığım kadarıyla, bir PK'ye FK kısıtlaması koyamazsın.

cevap

8

İki yönlü bir ilişkiniz varsa, bu tür kayıtları eklemek imkansız olurdu. Tavuk yumurta-. Tablo # 2'de kayıt bulunamadı, çünkü # 2 tablosunda eşleşen bir kayıt yok ve # 1 tablosunda hiçbir şey olmadığından tablo # 2 eklenemiyor.

FK kısıtlamalarını geçici olarak devre dışı bırakabilirsiniz (set foreign_key_checks = 0), ancak bu hiçbir zaman "gerçek" bir sistemde yapılmamalıdır. Tablo yükleme sırasının garanti edilemediği durumlarda, çöplüklerin yüklenmesi için daha fazla amaçlanmıştır.

+0

Tavuk veya yumurta argümanı için +1. ; -D – SparKot

+1

@DoSparKot: "ilk ne oldu?" soru "horoz": p –

+0

Hmm, bu benim düşünmediğim geçerli bir noktadır. Bunun yanı sıra, sadece bir kısıtlamaya sahip olma düşüncesi, otomatik olarak artırılan bir alanın değeri yüzünden zaten beni bulantıya sokuyor. (P.S. The rooster bir erkektir. Adil bir dövüş değil.) –