मुझे एक ऐसी स्थिति बनानी होगी, जहां मेरे पास एक टेबल हो Chequing_Account (जिसमें बजट, iban नंबर और खाते के अन्य विवरण शामिल हैं) जो कि दो अलग-अलग तालिकाओं से संबंधित होने के लिए है व्यक्ति और निगम दोनों जिसमें 0, 1 या कई चबाने वाले खाते हो सकते हैं।
दूसरे शब्दों में, एक ही तालिका Chequing खाते के साथ मेरे दो 1-टू-कई संबंध हैं
मैं इस समस्या के समाधान सुनना चाहूंगा जो सामान्यीकरण आवश्यकताओं का सम्मान करता है। अधिकांश समाधान जो मैंने सुना है वे हैं:
1) एक आम इकाई का पता लगाएं, जिसमें दोनों व्यक्ति और निगम संबंधित हैं और इसके और चेक्विंग_अक्वांट टेबल के बीच एक लिंक तालिका बनाते हैं, यह मेरे मामले में संभव नहीं है और भले ही मैं सामान्य समस्या को हल करना चाहता था और इस विशिष्ट उदाहरण को नहीं।
2) दो लिंक टेबल बनाएं PersonToChequingAccount और CorporationToChequingAccount जो चेकिंग अकाउंट्स के साथ दो संस्थाओं से संबंधित हैं। हालाँकि, मैं नहीं चाहता कि दो व्यक्तियों के पास एक ही चेक्विंग खाता हो, और मैं एक प्राकृतिक व्यक्ति और एक निगम को एक चेचिंग खाता साझा नहीं करना चाहता! इस छवि को देखें
3) Chequing खाते में दो विदेशी कुंजियाँ बनाएँ जो निगम और प्राकृतिक व्यक्ति की ओर इशारा करती हैं, हालाँकि मैं इस तरह से लागू करना चाहूँगा कि एक व्यक्ति और एक कंपनी के कई खाते हो सकते हैं, हालाँकि मुझे मैन्युअल रूप से यह सुनिश्चित करना होगा कि प्रत्येक ChequingAccount पंक्ति के लिए दोनों संबंध इंगित करें। कॉरपोरेशन और प्राकृतिक व्यक्ति क्योंकि एक चेचक खाता या तो एक निगम या एक प्राकृतिक व्यक्ति का है। इस छवि को देखें
क्या इस समस्या का कोई अन्य क्लीनर समाधान है?
CHECK (CorporationID IS NOT NULL AND NaturalPersonID IS NULL OR CorporationID IS NULL AND NaturalPersonID IS NOT NULL)
मैं समाधान 1 को अधिक पसंद करता हूं, हालांकि (लेकिन यह सिर्फ मेरे लिए है)। यह बहुत "क्लीनर" है।
ChecquingAccount
तालिका में रिकॉर्ड कर सकते हैं OwnerTypeID=1
और OwnerID=123
, यह दर्शाता है कि यह एक प्रकार है Corporation
, इसलिए तालिका 123
में आईडी Corporation
। OwnerTypeID आपको बताता है कि कौन सी तालिका है, और स्वामी तालिका में आपको ID बताता है।
Customers
टेबल कहो ।
OwnerTypeID
मेंChecquingAccount
, तालिका के साथ1=Corporation
और2=NaturalPerson
? इस तरह आपको केवल तालिकाOwnerID
में एक की आवश्यकता होती हैChecquingAccount
, जिसे आप साथ में अनुक्रमित कर सकते हैंOwnerTypeID
।