मैं अक्सर खुद से पूछताछ करता हूं कि क्या मैं डेटाबेस और संबंध बनाने के दौरान भविष्य की विस्तार के लिए योजना बनाने का प्रयास करने में सही दृष्टिकोण ले रहा हूं।डेटा सामान्यीकरण किस बिंदु पर लुभावना हो जाता है?
मैं एक
Donor
मेज और एकRecipient
तालिका है:मैं निम्नलिखित स्थिति है। दोनों टेबल
first_name
,last_name
,email_address
,date_of_birth
इत्यादि जैसी सामान्य जानकारी साझा करते हैं। दोनों प्रतीत होता है कि यदि आप मेरी ऑब्जेक्ट उन्मुख भाषा को क्षमा करेंगे, तोPerson
का एक सामान्य सार प्रकार साझा करें। यह संभव है कि कोई भी व्यक्ति जोRecipient
पर दान दे रहा है, बाद में दान देने के माध्यम सेDonor
बन सकता है, इसलिए यह महत्वपूर्ण है कि जानकारी तालिकाओं में डुप्लिकेट न हो। क्या मुझे विरासत पैटर्न का चयन करना चाहिए, या क्या मुझे सिर्फDonor
एस औरRecipient
एसPerson
तालिका में विदेशी कुंजी चाहिए?प्रारंभ में, मैं
email_address
और सड़क पता गुणों को सीधे उन चीजों में मैप करने की सोच रहा था, जिनकी आवश्यकता है, लेकिन फिर संभावना उत्पन्न हो सकती है कि एक व्यक्ति के पास कई ईमेल पते या मेलिंग पते होंगे (यानी: घर, काम, आदि)। इसका मतलब यह है कि हमारे पास कुछ हद तक मॉडल है:create table person(id int primary key auto increment, ..., default_email_address); create table email_address(id int primary key auto increment, email varchar(255), name varchar(255), is_default bool, person_id int);
इससे चीजें थोड़ा जटिल हो जाती हैं, जैसा कि आप कल्पना कर सकते हैं।
name
फ़ील्ड में डिफ़ॉल्ट मानों की एक सूची भी शामिल है साथ ही कस्टम इनपुट की अनुमति भी शामिल है। मैं इसे सिर्फ एक enum फ़ील्ड नहीं बना सकता, क्योंकि संभावना मौजूद है कि किसी के पास जोड़ने के लिए बहुत सारे ईमेल होंगे जो सभी अलग हो सकते हैं ... (यह वह बिंदु है जिस पर मैं चिल्लाता हूं "क्या यह सब भी काम करता है !?!? "और परियोजना के साथ निराश हो)
मुझे लगता है कि क्या यह वास्तव में करने पर निर्भर करता निम्नलिखित है: क्या बिंदु पर डेटा सामान्य ऊटपटांग बन जाता है? मेरा लक्ष्य यहां वास्तव में एक अच्छा-आगे-अनुकूल-अनुकूल डेटा मॉडल बनाना है जिसे मैं बाद में बनाने के लिए खुद को लात नहीं दूंगा।
अपने # 2 में, कौन-सा डेटा सामान्य करने के लिए वैकल्पिक हो सकता है? आप लगभग एक पंक्ति में एक ही फ़ील्ड के लिए निश्चित रूप से एकाधिक मान नहीं चाहते हैं, इसलिए मुझे किसी अन्य तालिका में विभाजित करने का विकल्प नहीं दिख रहा है। –