2009-05-09 10 views
5

परिभाषा के अनुसार, एक Junction Table (पुल तालिका/लिंक तालिका), कई-से-अनेक संबंधों के लिए प्रयोग किया जाता है जब इस तरह का प्रयोग किया:क्या एक जंक्शन तालिका (टेबल में शामिल हो सकता है) का उपयोग एक से कई रिश्तों के लिए भी किया जा सकता है?

CREATE TABLE Users 
(
UserLogin varchar(50) PRIMARY KEY, 
UserPassword varchar(50) NOT NULL, 
UserName varchar(50) NOT NULL 
) 


CREATE TABLE Permissions 
(
PermissionKey varchar(50) PRIMARY KEY, 
PermissionDescription varchar(500) NOT NULL 
) 


--This is the junction table. 
CREATE TABLE UserPermissions 
(
UserLogin varchar(50) REFERENCES Users (UserLogin), 
PermissionKey varchar(50) REFERENCES Permissions (PermissionKey), 
PRIMARY KEY (UserLogin, PermissionKey) 
) 

लेकिन यह भी नहीं किया जा सका बस के रूप में आसानी से के लिए एक एक-से-कई इस उदाहरण में रिश्ते, जिसमें एक उपयोगकर्ता कई आदेश के साथ जुड़ा हुआ है:

(मुझे समझ नहीं आता डेटाबेस में अच्छी तरह से तो मेरे को सही कृपया अगर मैंने कुछ गलत समझा है ।)

CREATE TABLE Users 
(
UserLogin varchar(50) PRIMARY KEY, 
UserPassword varchar(50) NOT NULL, 
UserName varchar(50) NOT NULL 
) 


CREATE TABLE Orders 
(
OrderKey varchar(50) PRIMARY KEY, 
OrderDescription varchar(500) NOT NULL 
) 


--This is the junction table. 
CREATE TABLE UserOrders 
(
UserLogin varchar(50) REFERENCES Users (UserLogin), 
OrderKey varchar(50) REFERENCES Orders (OrderKey), 
PRIMARY KEY (UserLogin, OrderKey) 
) 

उत्तर

6

हां, लेकिन फिर आप चेक को छोड़ देते हैं कि यह डेटाबेस के अंदर इसे लागू करने के बजाय एप्लिकेशन के लिए बहुत से नहीं है।

+0

क्या आप कह रहे हैं कि यह बुरा है? –

+0

कभी-कभी यह आसान हो सकता है यदि आप एक ही डीबी टेबल संरचना चाहते हैं लेकिन आवेदन में संबंध के प्रकार का निर्णय लें: कई लोगों में से कई या कई। (एक पैरामीटर के रूप में) ऐसे समय होते हैं जब आप कई संबंधों में से एक को विकसित करते हैं, यह जानकर कि बहुत से लोगों को बदलने की संभावना है। –

+0

मैं देखता हूं। और यदि आप डेटाबेस में एक-से-कई या कई से अधिक को लागू करना चाहते हैं, तो आप इसके बजाय किसी प्रकार की बाधा का उपयोग करते हैं? –

8

कोई कारण है कि एक जंक्शन तालिका एक-से-अनेक संबंध के लिए नहीं किया जा सकता है नहीं है। प्रश्न आमतौर पर प्रदर्शन में से एक है। अनावश्यक होने पर डेटाबेस को अतिरिक्त तालिका में क्यों शामिल किया जाता है?

+2

ऐसी परिस्थिति में क्या है जहां विदेशी कुंजी अधिकतर नल होगी? यदि जंक्शन तालिका, या इन तालिकाओं के बीच संबंध, शायद ही कभी पूछताछ या जुड़ा हुआ है, तो क्या यह अंतरिक्ष-बचत जंक्शन तालिका रखने के लिए बेहतर व्यापार होगा? –

1

एक बार जब आप एक टेबल बना लेते हैं, तो वास्तव में इसमें "जंक्शन" तालिका, "सहयोगी" तालिका, "शामिल हों" तालिका नहीं होती है - यह केवल एक तालिका है।

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

तकनीकी दृष्टि से, वास्तव में एक सहयोगी तालिका और किसी अन्य तालिका के बीच कोई अंतर नहीं है।

तो ये टेबल किसी भी अन्य तालिका को पूरा कर सकते हैं कि किसी भी भूमिका को भर सकते हैं। इस बारे में कोई नियम नहीं है कि अन्य तालिकाओं से कैसे संबंधित किया जा सकता है।

+0

धन्यवाद। –

3

यह होगा कई-से-अनेक:

CREATE TABLE UserOrders 
(UserLogin varchar(50) REFERENCES Users (UserLogin), 
OrderKey varchar(50) REFERENCES Orders (OrderKey), 
PRIMARY KEY (OrderKey)); 

नोट प्राथमिक कुंजी में अंतर:

CREATE TABLE UserOrders 
(UserLogin varchar(50) REFERENCES Users (UserLogin), 
OrderKey varchar(50) REFERENCES Orders (OrderKey), 
PRIMARY KEY (UserLogin, OrderKey)); 

यह एक-से-अनेक (एक उपयोगकर्ता कई आदेश है) होगा बाधा।

0

आप एक अनन्य बाधा जोड़ने (या इसे शामिल होने वाली तालिका की प्राथमिक कुंजी बनाते हुए, "केवल उस योगदान में खुद को रिश्तों की पहचान करते हैं) को जोड़ने के लिए आप में" एक "बाधा लागू कर सकते हैं, क्योंकि विदेशी है "कई" पक्ष की कुंजी। ऐसा इसलिए है क्योंकि आप चाहते हैं कि कई पक्षों में आरओओएस में शामिल हों/जुड़ाव तालिका में केवल एक रिश्ते और संबंध हैं।

0

मुझे लगता है कि आप अवधारणा गलत - यहाँ इसे आसानी से समझा है अगर यह मदद कर सकता है: दो तालिकाओं (जैसे कि, ए और बी) के बीच एक कई-कई संबंध प्राप्त करने के लिए, हम की मदद लेने की जरूरत एक जंक्शन तालिका (कहें, तालिका सी) जिसमें टेबल ए और बी दोनों के साथ एक-कई संबंध होंगे।

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

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