2008-11-13 15 views
5

बहु-मूल्यवान विशेषताओं को संभालने के लिए एक रिलेशनल डेटाबेस को कैसे डिज़ाइन किया जाना चाहिए?डेटाबेस में बहुविकल्पीय विशेषताओं

संपादित: विस्तार से बता दें:

दो तरीके मैं ऐसा करने के लिए के बारे में सोच सकते हैं -

  1. क्षेत्र है, जो थोड़ा अनाड़ी प्रकट होता है में कॉमा सेपरेटेड वैल्यूज़ डाल की तरह कुछ कोशिश कर रहा है।
  2. फ़ील्ड के लिए एक और टेबल बनाएं और एकाधिक मान फ़ील्ड पर जाएं। यदि मेरे पास इस तरह के बहुत सारे क्षेत्र हैं, तो इससे बड़ी संख्या में तालिकाओं का कारण बन सकता है।

सवाल यह है:

  1. इस से निपटने में किसी भी अधिक तरीके हैं?
  2. उपर्युक्त दो तरीकों में से कौन सा आम तौर पर उपयोग किया जाता है?

अग्रिम

+0

देख आप ज्यादा इस की तुलना में अधिक स्पष्ट होना चाहिए। मुझे लगता है कि अंग्रेजी आपकी पहली भाषा नहीं हो सकती है, लेकिन इसे एक शॉट दें। लोग मदद करने की कोशिश करेंगे और कुछ आपके प्रश्न को ठीक करेंगे लेकिन आपको हमें कुछ करने के लिए कुछ देना होगा। –

उत्तर

1

धन्यवाद संबंध एक-से-कई या कई-से-अनेक है? एक से कई रिश्तों के साथ, मैं मूल तालिका (एक) को संदर्भित करने वाली बाल तालिका (कई) में एक विदेशी कुंजी की अनुशंसा करता हूं। कई से अधिक रिश्तों के साथ, तो आपकी सबसे अच्छी शर्त शायद माता-पिता और बच्चे दोनों के लिए विदेशी कुंजी के साथ एक अलग तालिका होगी।

12

पारंपरिक संबंधपरक डेटाबेस डिज़ाइन में, प्रत्येक पंक्ति & कॉलम को केवल एक मान स्टोर करना होगा।

अल्पविराम से अलग सूचियों या इस तरह की किसी भी चीज़ को स्टोर न करें।

उदाहरण के लिए, एक स्पोर्ट्स टीम के सात सदस्य हैं। आप ऐसा कर सकता है:

CREATE TABLE team (
    team_id  INT PRIMARY KEY, 
    team_name VARCHAR(50), 
    team_members VARCHAR(200) 
); 
INSERT INTO team VALUES (1,'Dwarfs', 'Sleepy,Dopey,Sneezy,Happy,Grumpy,Doc,Bashful') 

लेकिन यह यह करने के लिए बेहतर है:

CREATE TABLE team (
    team_id  INT PRIMARY KEY, 
    team_name VARCHAR(50), 
); 
INSERT INTO team (team_name) VALUES ('Dwarfs'); 

CREATE TABLE team_members (
    team_id  INT, 
    member_name VARCHAR(20), 
    FOREIGN KEY (team_id) REFERENCES team(team_id) 
); 
INSERT INTO team_members VALUES 
    (LAST_INSERT_ID(), 'Sleepy'), 
    (LAST_INSERT_ID(), 'Dopey'), 
    (LAST_INSERT_ID(), 'Sneezy'), 
    (LAST_INSERT_ID(), 'Happy'), 
    (LAST_INSERT_ID(), 'Grumpy'), 
    (LAST_INSERT_ID(), 'Doc'), 
    (LAST_INSERT_ID(), 'Bashful'); 

nb:LAST_INSERT_ID() एक MySQL कार्य है। इसी तरह के समाधान डेटाबेस के अन्य ब्रांडों में उपलब्ध हैं।

+0

क्या LAST_INSERT_ID एक तालिका से जुड़ा हुआ है? या यह डेटाबेस में एक अद्वितीय संख्या है? –

+0

MySQL में, ऑटो-वृद्धि मूल्य किसी तालिका से बंधे होते हैं, ओरेकल या पोस्टग्रेएसक्यूएल में कोई अनुक्रम वस्तु नहीं होती है। लेकिन LAST_INSERT_ID() आपके द्वारा उपयोग की जाने वाली तालिका के बावजूद, INSERT द्वारा उत्पन्न सबसे हालिया मान देता है, जो इसे बाल तालिकाओं को पॉप्युलेट करने के लिए उपयोगी बनाता है। –

+2

यह भी ध्यान दिया जाना चाहिए कि API में LAST_INSERT_ID() और mysql_insert_id() प्रति कनेक्शन हैं। यानी मान उस कनेक्शन पर अंतिम डालने से है, पूरे डेटाबेस पर नहीं। –

1

पहले (1 एनएफ), सेकेंड (2 एनएफ) और तीसरे (3 एनएफ) डेटाबेस डिजाइन के सामान्य रूपों के बारे में http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html पढ़ें। 3 एनएफ से ऊपर अधिक फॉर्म हैं, लेकिन आमतौर पर 3 एनएफ पर्याप्त है।

+0

लिंक टूटा हुआ है। –

1

यदि आप सख्ती से संबंधपरक डेटाबेस के साथ काम करने के लिए सीमित हैं, तो आपको उन मानों को तालिका में पंक्तियों के रूप में स्टोर करने की आवश्यकता है। और यह आपका सवाल था - एक रिलेशनल डेटाबेस के साथ इसे कैसे करें। हालांकि, ऐसे कई डेटाबेस उपलब्ध हैं जो एक क्षेत्र में कई मानों का मूल भंडारण प्रदान करते हैं जो वास्तविक दुनिया डेटा के लिए एक बहुत अच्छा मैच साबित होता है, प्रोग्राम के साथ आसान होता है, और समझने में आसान होता है (बिना टेबल के विस्फोट के तीसरे सामान्य रूप के साथ)। अधिक जानकारी के लिए, http://en.wikipedia.org/wiki/MultiValue http://en.wikipedia.org/wiki/IBM_U2 http://en.wikipedia.org/wiki/InterSystems

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