2010-01-22 16 views
5

मेरे पास एक सारणी है जो इस तरह कुछ दिखती है:पदानुक्रम/उप श्रेणियों के साथ एक एसक्यूएल तालिका डिजाइन करना

आईडी | कीवर्ड | श्रेणी | उप-श्रेणी | उप-उप-श्रेणी | उप-उप-उप-श्रेणी

क्या मुझे इसे दो तालिकाओं में विभाजित करने की आवश्यकता है (एक कीवर्ड तालिका और पैरेंट आईडी के साथ श्रेणियां तालिका) यदि कोई कीवर्ड केवल एक श्रेणी, उप-श्रेणी से संबंधित हो ... आदि। जिसका मतलब है कि कोई पुनरावृत्ति नहीं है। क्या अभी भी इसे विभाजित करने की आवश्यकता है?

उत्तर

5

आपको 1-1 मैपिंग का प्रतिनिधित्व करने के लिए केवल एक तालिका की आवश्यकता है। 1-कई या कई-मैपिंग का प्रतिनिधित्व करने के लिए, आपको एकाधिक तालिकाओं का उपयोग करना चाहिए।

यदि कोई कीवर्ड केवल एक श्रेणी/उप-श्रेणी/उप-उप-श्रेणी के अनुरूप हो सकता है, तो आपका वर्तमान लेआउट ठीक होना चाहिए।

एक चेतावनी: यदि आप कीवर्ड के आधार पर खोजना चाहते हैं, तो टेबल को अलग करने के लिए प्रदर्शन लाभ हो सकते हैं। एक पूर्णांक खोज करने के लिए यह बहुत तेज़ है।

किसी अन्य तालिका में कीवर्ड मानों को संग्रहीत करने की चर्चा को किसी अन्य तालिका में देश के नामों को संग्रहीत करने के this discussion से मेल खाता है (जो अधिकतर स्थैतिक हैं)। किसी अन्य तालिका का उपयोग करने के कुछ प्रमुख फायदे हो सकते हैं (बोली जाने वाली) भाषा आजादी, तेज खोज, और बाद में अपडेट करने में आसानी।

1

मैं इस तरह की दो सारणी का उपयोग करूंगा।

Categories 
------------------- 
PK,FK1 | CategoryID 
     | Keyword 
     | Category 

    SubCategories 
-------------------- 
PK,FK1 | CategoryID 
PK,FK1 | SubCategoryID 
1

यह मतलब हो सकता है यदि आप का नाम बदलें या बाद में अपनी श्रेणियों को पुनर्व्यवस्थित करने की उम्मीद है इसे विभाजित करने के लिए :

  • के रूप में यह है अगर आप इसे छोड़, आपको लगता है कि नाम बदलने करना होगा/इस तालिका में प्रत्येक पंक्ति के लिए चरण (पुन: व्यवस्थित करें (श्रेणी/उप-श्रेणी/उप-उप-श्रेणी/उप-उप-उप-श्रेणी फ़ील्ड बदलना) जिसमें ((उप) उप) उप) श्रेणी शामिल है। जिसके परिणामस्वरूप एक और जटिल क्वेरी होती है, और यदि आपके पास इस कीवर्ड तालिका में बहुत सारी पंक्तियां हैं, तो यह एक प्रदर्शन समस्या हो सकती है (= डेटाबेस के लिए कुछ समय लेना); दूसरी ओर, प्रश्न (पढ़ना) जितना तेज़ हो सकेगा।
  • यदि आप इसे विभाजित करते हैं, तो अद्यतन (((उप) उप) उप) श्रेणी केवल कम पंक्तियों के लिए ही की जाएगी, लेकिन क्वेरी (पढ़ना) अधिक समय लगेगा क्योंकि इसे दो (या अधिक) तालिकाओं के साथ काम करना है ।

विपक्ष और दोनों के पेशेवरों वजन और फिर एक decision.m

1

क्यों नहीं सिर्फ एक ParentID स्तंभ और FK पी करने के लिए जोड़ कर?

6

मैं प्रत्येक विदेशी कुंजी श्रेणियाँ मेज से आने के साथ दो तालिकाओं में ऐसा चाहते हैं: श्रेणियाँ तालिका में

Keywords 
id (PK) 
keyword 
category_id (FK) 

Categories 
category_id (PK) 
category 
parent_category_id (FK) 

डेटा दिखाई देगा:

category_id category parent_category_id 
1    Food  null 
2    meat  1 
3    organic  1 
4    fruit  3 

और उस डेटा कीवर्ड तालिका इस तरह दिखेगी:

id  keyword category_id 
1  grapes  4 
2  chicken 2 
+0

यह बढ़िया है! धन्यवाद। दूसरे उत्तर के आधार पर मैं प्रदर्शन के लिए इसे विभाजित कर दूंगा और आपके डिजाइन का पालन करूंगा। – chips