5

मैं एक डेटाबेसकैसे एक डेटाबेस

व्यक्ति में यह जानकारी सहेजे है में वैवाहिक संबंध को बचाने के लिए? मुझे यहां उचित डिजाइन पैटर्न क्या लागू करना चाहिए?

धन्यवाद!

+18

मुझे नहीं लगता कि आप अपनी शादी को बचाने के लिए डेटाबेस पर भरोसा कर सकते हैं; डी – glenatron

+0

2 टेबल। एक एसोसिएशन टेबल के साथ एक से एक रिश्ते। –

+1

"ग्लेनट्रॉन महिलाओं और सज्जनो! वह यहाँ सप्ताहांत होगा, अपने वेटर्स और वेट्रेस को टिपना न भूलें!" –

उत्तर

4

आप केवल एक ही व्यक्ति को maried किया जा सकता है: 1:

------------- 
- Person - 
------------- 
person_id (key) 

------------- 
- Mariage - 
------------- 
first_person_id (foreign key) 
second_person_id (foreign key) 
start_date 
end_date 
n: 1

------------- 
- Person - 
------------- 
id (key) 
maried_to_id (foreign key) 

आप एक से अधिक व्यक्ति के लिए maried तो किया जा सकता है या पिछले mariages का ट्रैक रखने के लिए चाहते हैं, एन

(भी first_person_id + second_person_id + तारीख रूप mariage के लिए एक अद्वितीय कुंजी। आप बाहर की तारीख छोड़ सकता है, लेकिन फिर remariages पर नज़र रखी जा wouldnt)

+0

फ़ील्ड maried_to_id दोनों व्यक्तियों में पूरा किया जाना चाहिए? यह दोहराई गई जानकारी है, लेकिन मैं इसे उनमें से किसी एक में खाली नहीं छोड़ सकता क्योंकि यह सच नहीं होगा –

+0

@mauro: हाँ, यह दोनों के लिए भरा जाना चाहिए। निस्संदेह आपको यह सुनिश्चित करने के लिए कुछ तर्क की आवश्यकता होगी कि यह शर्त सत्यापित है (यानी अगर किसी व्यक्ति को विवाह किया जाता है तो किसी को हटाएं नहीं, अप्रत्याशित व्यक्तियों के लिए मैरी न करें ...) – marcgg

+1

आप एंडडेट को भूल गए! -) और, थोड़ा सा मधुमक्खी रूढ़िवादी, मैं इसे नाम के लिए और अधिक सटीक बना दूंगा: पति आईडी, पति/पत्नी। इस तरीके से आप प्रवेश 1 तरीके को लागू करते हैं। लेकिन यह समलैंगिक विवाह के साथ काम नहीं करेगा। –

0

मैं संरचना 0 के बाद की सिफारिश करेंगेआइए कहें कि टेबल का नाम व्यक्ति है।

  1. PersonId (पूर्णांक, कुंजी)
  2. MarriedTo (पूर्णांक, नल)

.....

विदेशी कुंजी संबंध जहाज बनाने के लिए कोई ज़रूरत नहीं।

+1

विदेशी कुंजी को बहुत अधिक ** हमेशा ** एफके रिलेशनशिप – Jamiec

+0

का उपयोग करके लागू किया जाना चाहिए ध्यान दें कि राज्य को डुप्लिकेट किया गया है, जैसा कि एक है। मैरीड टू (बी) का मतलब बी। मैरीड टू (ए) होना चाहिए। – Piskvor

+0

हां - कई पंक्तियों में विवाहित होने के लिए विवाहित_काई की जटिलता सामान्यीकरण समस्या है ... – Randy

0

आप इसे "व्यक्ति" तालिका पर "पति/पत्नी" कॉलम के साथ कर सकते हैं जो शून्य हो सकता है (अविवाहित व्यक्ति के मामले में)।

यदि विवाहित है तो यह किसी अन्य व्यक्ति की आईडी है, जैसा कि एक विदेशी कुंजी है।

एक बेहतर समाधान एक अलग "विवाह" तालिका कि कम से कम तीन स्तंभ हैं होगा:

MarriageId 
Person1Id 
Person2Id 
... 

व्यक्ति पहचान-पत्र "व्यक्ति" तालिका में विदेशी कुंजी हैं, और आप MarriageId के संयोजन बनाना चाहिए , व्यक्ति 1 आईडी और व्यक्ति 2 आईडी अद्वितीय है जहां एक पंक्ति जोड़ने से बचें जहां लोग बदल गए हैं।

हालांकि यह है कि इन दोनों मॉडलों काफी बुनियादी हैं और कितने लोगों को एक शादी में हो सकता है के बारे में मान्यताओं ने बताया जाना चाहिए;)

+0

आपको दो विवाह पंक्तियों को रोकने/रोकने के लिए कुछ जोड़ना चाहिए, व्यक्ति आईडी के साथ इंटरचेंज किया गया है। – araqnid

+0

@araqmid - अच्छा बिंदु। – ChrisF

2

यहां एक काल्पनिक स्कीमा का उपयोग कर सकते है। सभी लोग एक ही टेबल में हैं, और प्रत्येक व्यक्ति के पास एक अद्वितीय आईडी है। विवाह विदेशी कुंजी के साथ रिश्ते की मेज में हैं।

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

अच्छा - क्रिया समाप्ति के उपयोग को छोड़कर मनमाने ढंग से प्रतिबंधित है ... मैं start_dt और end_dt के साथ जाऊंगा और यदि आवश्यक हो तो शायद एंड्रॉइड विशेषता कहीं और हो। – Randy

0

यह एक साधारण देखने टेबल महत्वपूर्ण हिस्सा दो क्षेत्रों, Person1 की आईडी क्षेत्र के लिए एक एक विदेशी कुंजी हो रही है के लिए एक प्रयोग की तरह लगता है PERSON2 की आईडी क्षेत्र के लिए अन्य एक विदेशी कुंजी। शादी के बारे में कोई विवरण (तिथियां, चाहे वह अभी भी चालू है और इसी तरह) भी इस तालिका में संग्रहीत की जाएगी।

इससे लोगों को कई विवाह, बहुभुज संबंध और अन्य लोगों की सुविधा मिल जाएगी। यदि आप एक साधारण 1: 1 रिश्ते चाहते हैं तो आप व्यक्ति क्षेत्र में पति/पत्नी के लिए एक विदेशी कुंजी संदर्भ शामिल कर सकते हैं, लेकिन यह काफी कम लचीला होगा।

1

स्कीमा डिज़ाइन को पढ़ाने के लिए यह एक अच्छा सवाल है। की तरह एक साधारण सी समस्या को आसानी से काफी जटिल हो सकता है क्या लगता है:

जैसे, कैसे संभाल करने के लिए:
- शादी के विभिन्न प्रकार (, कानूनी धार्मिक अन्य,)
- - समवर्ती विवाह दो से अधिक लोगों
की mariages
- दोहराने विवाह
- तलाक
- आत्म शादी (हे, यह उल्लास पर happend!)

चाल, अगर वहाँ एक है, ध्यान से क्या आप की कोशिश कर रहे के सभी क्रमपरिवर्तन बाहर सोचने के लिए है आदर्श। केवल तभी आप वास्तव में आगे बढ़ते हैं और इसे मॉडल करते हैं।

+0

भी, यह संभव है कि आपको विस्तृत इतिहास की जानकारी को स्टोर करने की आवश्यकता होगी, लेकिन किसी भी arbtirary व्यक्ति के वर्तमान पति/पत्नी को प्राप्त करने के एक प्रभावी तरीके की भी आवश्यकता है, जिसके लिए कुछ अतिरिक्त बुनियादी ढांचे की आवश्यकता हो सकती है ... मजेदार :) – araqnid

संबंधित मुद्दे