5
ben

nasıl bir veritabanı

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!

+18

Evliliğinizi kaydetmek için bir veritabanına güvenebileceğinizi düşünmüyorum; D – glenatron

+0

2 tablolar. İlişki tablosu tablosuyla bire bir ilişki. –

+1

"Glenatron bayanlar baylar! Tüm hafta sonu burada olacak, garsonlarınızı ve garsonlarınızı bahşiş vermeyi unutmayın!" –

cevap

4

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)

+0

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ı –

+0

@ 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

+1

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ı. –

0

Ben yapının 0 takiben öneriyoruzTablo adının Kişi olduğunu söyleyelim.

  1. PersonId (int, Anahtarı)
  2. MarriedTo (int, null)

.....

yabancı anahtar ilişkisi gemi oluşturmak gerek yok.

+1

Yabancı anahtarlar hemen hemen ** her zaman ** bir FK ilişkisi kullanarak zorlanabilir – Jamiec

+0

Durumun çoğaltıldığını unutmayın, a.MarriedTo (b) de b.MarriedTo (a) anlamına gelmelidir. – Piskvor

+0

evet - birçok satırda eşit olmak zorunda olan evliyenin komplikasyonu normalleşme problemi ... – Randy

0

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

+0

Kişinin kimlikleri birbiriyle eşleştirilerek iki evlilik sırasının nasıl ele alınacağını/önleyeceğinizi belirtmek için bir şey eklemelisiniz. – araqnid

+0

@araqmid - iyi nokta. – ChrisF

2

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 
+0

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

0

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.

1

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.

+0

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

İlgili konular