Kişi bir veritabanında bu bilgileri kaydetmek zorunda
yılında evlilik ilişkisini kurtarmak için? Uygun tasarım deseni burada uygulanmalı mıyım?
Teşekkür ederiz!
Kişi bir veritabanında bu bilgileri kaydetmek zorunda
yılında evlilik ilişkisini kurtarmak için? Uygun tasarım deseni burada uygulanmalı mıyım?
Teşekkür ederiz!
Eğer sadece bir kişiye maried edilebilir ise: Eğer birden fazla kişiye maried veya önceki Mariages takip etmek istiyorum, n edilebilirse 1
-------------
- Person -
-------------
id (key)
maried_to_id (foreign key)
: n
(ayrıca first_person_id + second_person_id + tarih biçimi evliliğe yönelik benzersiz bir anahtar. Sen tarih dışarıda bırakın, ama sonra remariages izlenebilir olmaz)
maried_to_id alanın her iki kişide de tamamlanması gerekir? Bu tekrarlanan bilgi, ama ben onlardan birinde boş bırakamam çünkü doğru olamazdı –
@ mauro: evet, her ikisi için doldurulmalıdır. Tabii ki bu durumun doğrulandığından emin olmak için bir mantığa ihtiyacınız olacak (yani, kişi evlendirildiyse birisini silmeyin, var olmayan kişilere meleğim ...) – marcgg
EndDate'i unuttun! -) Ve, birazcık arı muhafazakar, ismimi daha kesin hale getiririm: HusbandId, SpouseId. Bu şekilde giriş 1 yolunu zorlarsınız. Ama eşcinsel evlilikle işe yaramazdı. –
Ben yapının 0 takiben öneriyoruzTablo adının Kişi olduğunu söyleyelim.
.....
yabancı anahtar ilişkisi gemi oluşturmak gerek yok.
Yabancı anahtarlar hemen hemen ** her zaman ** bir FK ilişkisi kullanarak zorlanabilir – Jamiec
Durumun çoğaltıldığını unutmayın, a.MarriedTo (b) de b.MarriedTo (a) anlamına gelmelidir. – Piskvor
evet - birçok satırda eşit olmak zorunda olan evliyenin komplikasyonu normalleşme problemi ... – Randy
Sen boş (evli olmayan kişinin durumu için) olabilir "Kişi" masada bir "Eş" sütunlu yapabiliriz. Bir yabancı anahtar olarak bu, diğer kişinin kimliği tutan evli ise
.
Daha iyi bir çözüm, en az üç sütun vardır, ayrı bir "Evlilik" tablosu şöyle olacaktır:
MarriageId
Person1Id
Person2Id
...
kişi kimliği yönettiği "Kişi" tabloya yabancı anahtarları vardır ve MarriageId kombinasyonunu yapmalıdır Person1Id ve Person2Id, insanların takas edildiği bir satır eklemekten kaçınmak için benzersizdir. hem bu modeller oldukça temel ve birçok kişi bir evlilik nasıl olabilir ilgili tahminlerde bulunmak olduğuna işaret edilmelidir rağmen
;) İşte
kullanabileceğiniz bir varsayımsal şema olduğunu. Tüm insanlar tek bir masada ve her kişinin benzersiz bir kimliği vardır. Evlilikler, yabancı anahtarlarla bir ilişki tablosunda.
PERSONS
- ID - INTEGER, PK
- FIRSTNAME - VARCHAR(20)
- LASTNAME - VARCHAR(20)
- SEX - CHAR(1)
- ... any other fields
MARRIAGES
- PERSON1_ID - INTEGER, FK
- PERSON2_ID - INTEGER, FK
- MARRIAGE_DATE - DATE
- ANULLMENT_DATE - DATE
- ... any other fields
nice - fiil iptal kullanımının keyfi sınırlayıcı olması dışında ... begin_dt ve end_dt ve belki de gerekirse başka bir yerde bir end_reason özniteliği ile giderdim. – Randy
Bu önemli parçası iki alan, PERSON1 kimlik alanı için bir yabancı anahtar yaşıyor masa-bir basit arama için bir kullanım gibi geliyor PERSON2 kimlik alanı için başka bir yabancı anahtar. Evlilikle ilgili herhangi bir ayrıntı (tarihler, halen geçerli olup olmadığı gibi) bu tabloda da saklanacaktır. İnsanlar çok üzerinde birden evlilikleri, çok eşli ilişkiler ve vardı sahip kolaylaştıracak
. Basit bir 1: 1 ilişki istiyorsanız, kişi alanındaki eşe sadece bir yabancı anahtar referansı ekleyebilirdiniz, ancak çok daha az esnek olacaktır.
Bu, şema tasarımının öğretilmesi için harika bir sorudur. Basit bir sorun kolayca çok karmaşık hale gelebilmektedir neye görünüyor:
Ör nasıl işleneceğini:
- evlilik farklı türleri (diğer yasal dini)
- - eşzamanlı evlilikler ikiden fazla kişi
ait mariages
- tekrar evlilik
- boşanma
- öz evlilik (hey, Glee'de happend!) varsa
hile, dikkatli çalıştığınız şeyin tüm permütasyon dışarı düşünmektir modeli. Ancak o zaman gerçekten devam edip modelliyorsunuz.
ayrıca, detaylı tarih bilgisini saklamanız gerekebileceği gibi, ekstra bir altyapıya ihtiyaç duyabileceğiniz herhangi bir arızi şahsın mevcut eşini de almanın bir yolu olmalı ... eğlenceli :) – araqnid
Evliliğinizi kaydetmek için bir veritabanına güvenebileceğinizi düşünmüyorum; D – glenatron
2 tablolar. İlişki tablosu tablosuyla bire bir ilişki. –
"Glenatron bayanlar baylar! Tüm hafta sonu burada olacak, garsonlarınızı ve garsonlarınızı bahşiş vermeyi unutmayın!" –