2011-06-01 15 views
5

मेरे डेटाबेस में, कई तालिकाओं में 'राज्य' फ़ील्ड होता है, जो राज्य का प्रतिनिधित्व करता है कि, उस विशेष इकाई में पड़ता है। मुझे बताया गया है कि हमें इस तरह की चीज़ के लिए लुकअप टेबल का उपयोग करना चाहिए, लेकिन मुझे सटीक तंत्र की अनिश्चितता है । क्या कोई इन बिंदुओं को स्पष्ट कर सकता है?ऑरैकल में लुकअप टेबल का उपयोग कैसे करें?

  1. ईमानदारी कैसे बनाए रखा जाता है? (यानी मैं कैसे सुनिश्चित कर सकता हूं कि केवल राज्य तालिका से मूल्य अन्य तालिकाओं में जाते हैं?)

  2. क्या राज्य का नाम अन्य तालिकाओं में जाता है, या राज्य तालिका से राज्य आईडी दूसरे में जाता है टेबल?

उत्तर

7

1 - ईमानदारी को मुख्य कुंजी बाधा कहा जाता है जिसका उपयोग करके बनाए रखा जाता है। एक उचित परिदृश्य आप इन दो तालिकाओं करना हो सकता है:

Table Name: STATE_CODE 
ID DESCRIPTION 
================= 
1 Alabama 
2 Arkansas 
... 
50 Wyoming 

Table Name: CUSTOMER 
===================== 
CUST_ID CUST_NAME CUST_STATE 
100  AAA Company   1 --they are in Alabama! 
200  ZZZ Company   50 --they are in Wyoming! 

यह उत्तर देता है अपने प्रश्न # 2: राज्य कोड, नहीं पूरा नाम, इस उदाहरण में ग्राहक तालिका में चले जाते हैं।

एक ठेठ स्क्रिप्ट एक मौजूदा लेआउट पर संरचना इस तरह लागू करने के लिए इस तरह होगा:

--first, create the lookup table 
CREATE TABLE STATE_CODE(
    ID INTEGER NOT NULL 
,DESCRIPTION VARCHAR(100) NOT NULL 
,PRIMARY KEY(ID) 
); 

--now add a reference to the lookup table inside your existing table 
--the REFERENCES part will **force** entries 
--to have a matching entry in STATE_CODE 
ALTER TABLE CUSTOMER ADD STATE_CODE_ID REFERENCES STATE_CODE(ID); 

और यह जवाब देता है अपने प्रश्न # 1: यह "संदर्भ" आदेश एक विदेशी कुंजी बाधा पैदा करेगा कि होगा STATE_CODE तालिका में एक समान प्रविष्टि रखने के लिए CUSTOMER.STATE_CODE में सभी प्रविष्टियों को मजबूर करें।

INSERT INTO CUSTOMER(CUST_ID,CUST_NAME,CUST_STATE) 
VALUES(9000,'Martians',74837483748); 

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

+0

अद्भुत विस्तृत स्पष्टीकरण! धन्यवाद! –

2

उत्तर:

  1. वफ़ादारी विदेशी कुंजी की कमी से बनाए रखा है।

    एक विदेशी कुंजी बाधा यह सुनिश्चित करती है कि निर्दिष्ट तालिका में बाल तालिका केवल एक ही मान को अनुमति दे, माता-पिता तालिका के नामित कॉलम से आती है।

  2. शामिल/विभिन्न डेटाबेस संचालन के लिए, सबसे छोटा डेटा प्रकार संभव है क्योंकि प्रदर्शन बेहतर होगा।

    उदाहरण के लिए, INT 4 बाइट्स लेता है जबकि VARCHAR2 (4+) उससे अधिक लेता है। एक प्रदर्शन परिप्रेक्ष्य से, यदि आप VARCHAR2 (4+) से INT का उपयोग करते हैं तो यह तेज़ होगा। लेकिन आप दो कॉलम चाहते हैं - एक प्राथमिक कुंजी के रूप में काम करने के लिए जबकि दूसरा मानव पठनीय वर्णन है। यह दृष्टिकोण आपको मौजूदा रिकॉर्ड को प्रभावित किए बिना विवरण बदलने की अनुमति देता है।

    यह कृत्रिम/सरोगेट और प्राकृतिक कुंजी के बारे में एक चर्चा की ओर जाता है, जो प्राथमिक कुंजी (और अंततः एक विदेशी कुंजी) के रूप में उपयोग करने के लिए सबसे अच्छा है।

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