6

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

प्रतिबंध आर: कार के विक्रेता का निर्माता कार के विक्रेता के शोरूम के संबद्ध निर्माता के समान निर्माता होना चाहिए।

चित्र स्पष्ट विदेशी कुंजी संबंध दिखाता है।

 ----> Manufacturer <---- 
    |      | 
    |      | 
Showroom      | 
    ^      | 
    |      Model 
    |      ^
Salesperson     | 
    ^      | 
    |      | 
    --------- Car ---------- 

आप प्रतिबंध आर को कैसे लागू करते हैं? आप एक विदेशी कुंजी संबंध Car --> Manufacturer जोड़ सकते हैं। फिर भी एक कार के निर्माता को "हीरा" के चारों ओर एक साथ या दूसरे टेबल में शामिल करके स्थापित किया जा सकता है, इसलिए निश्चित रूप से ऐसा करने के लिए सामान्य नहीं किया जाएगा? और फिर भी मैं अन्यथा नहीं जानता कि बाधा को कैसे लागू किया जाए।

+2

यह केवल एक उदाहरण हो सकता है - लेकिन यहां मैं उस तथ्य को सीमित नहीं करूँगा क्योंकि एक शोरूम निर्माता से जुड़ा हुआ है, तो वहां बेचने वाली सभी कारें उस निर्माता द्वारा बनाई जानी चाहिए ... आगे - वही विक्रेता कई शोरूम में काम करते हैं। – Randy

+0

^^ शोरूम को निर्माता के साथ क्या करना है? – Kermit

+0

मैंने इस सवाल को स्पष्ट किया है। एक शोरूम केवल निर्माता द्वारा बनाई गई कारों को बेचता है जिस पर यह संबद्ध है। – Hammerite

उत्तर

1

यदि मैं सही तरीके से प्रश्न समझ गया, तो यह करीब होना चाहिए।

enter image description here

यहाँ कुंजी

-- 
-- Keys for SalesPerson 
-- 
alter table SalesPerson 
    add constraint PK_salesperson primary key (PersonID) 

, add constraint AK1_salesperson unique (ManufacturerID, ShowRoomNo, PersonID) 

, add constraint FK1_salesperson foreign key (PersonID) 
          references Person (PersonID) 

, add constraint FK2_salesperson foreign key (ManufacturerID, ShowRoomNo) 
         references ShowRoom (ManufacturerID, ShowRoomNo) 
; 

-- 
-- keys for Sale table 
-- 
alter table Sale 
    add constraint PK_sale primary key (SaleID) 

, add constraint FK1_sale foreign key (BuyerID) 
        references Person (PersonID) 

, add constraint FK2_sale foreign key (ManufacturerID, ModelName, ShowRoomNo) 
       references CarDisplay (ManufacturerID, ModelName, ShowRoomNo) 

, add constraint FK3_sale foreign key (ManufacturerID, ShowRoomNo, SalesPersonID) 
       references SalesPerson (ManufacturerID, ShowRoomNo, PersonID) 
; 
+0

आपके उत्तर के लिए धन्यवाद। मुख्य अवलोकन क्रॉस-रेफरेंस टेबल कारडिस्प्ले का निर्माण होता है, और इसे समायोजित करने के लिए विदेशी कुंजी संबंधों में बदलाव होता है। – Hammerite

+0

@ हैमरराइट, सेल्सपर्सन पर वैकल्पिक कुंजी (अद्वितीय इंडेक्स) 'एके' को भी नोट करें, 'बिक्री' तालिका से एफके उस कुंजी पर इंगित करता है। –

4

तरह से यह सुनिश्चित करें कि है कि हीरे की "नीचे" हीरे की "पक्षों" है कि अंततः एक अलग करने के लिए नेतृत्व "संदर्भ नहीं दे सकता के लिए कुछ विवरण हैं शीर्ष वसा "प्राकृतिक कुंजी" हीरे की, की पहचान रिश्तों और जिसके परिणामस्वरूप उपयोग करने के लिए है ", तो वे तल पर विलय कर दिया हो सकता है:

enter image description here

(केवल पीके फ़ील्ड दिखाया गया है, ब्रेवटी के लिए। आप लगभग निश्चित रूप से Car आदि में एक वैकल्पिक कुंजी के रूप में एक वाहन पहचान संख्या चाहता हूँ ...)

ManufacturerId दोनों हीरा पक्षों नीचे स्थानांतरित हो गया है और अंत में एक भी क्षेत्र में निचले भाग में विलय कर दिया। यह तथ्य है कि यह एकल दायर किया गया है यह सुनिश्चित करता है कि एक ही कार के लिए दो निर्माता नहीं हो सकते हैं।

enter image description here

सरोगेट्स इस मॉडल अकेले लिया में अनावश्यक हैं:

BTW, यह अभी भी आप किराए की चाबियाँ, का उपयोग करते हुए (ये प्राकृतिक की तुलना के अलावा) डीबीएमएस संभालने से नहीं रोकता वैकल्पिक कुंजी को FKS का समर्थन करता है , लेकिन आपके पास कुछ अन्य संस्थाएं हो सकती हैं जिन्हें आपने हमें नहीं दिखाया है, जो पतला एफके का उपयोग करने से लाभ उठा सकते हैं।


उपरोक्त आपके आरेख का सबसे प्रत्यक्ष रूपांतरण है, जहां एक कार केवल बेची गई कार के रूप में मौजूद है।हालांकि, मुझे लगता है आपको लगता है कि अभी तक नहीं बिके कारों स्टोर करने के लिए सक्षम होना चाहते हैं चाहते हैं, और जब वे बेचा हैं कार खरीदार आदि ...

तो, एक और अधिक पूरा मॉडल कुछ ऐसा दिखाई देगा याद इस:

enter image description here

हम सिर्फ कुल्ला और दोहराने की पहचान रिश्तों चाल है, तो एक कार एक अलग निर्माता के एक शोरूम में प्रदर्शित नहीं हो सकता है और एक अलग शोरूम से एक विक्रेता द्वारा बेचा नहीं जा सकता।

Car में केवल एक पंक्ति होने पर एक कार बेची जाती है। CarऔरSale में एक समान पंक्ति होने पर एक पंक्ति बेची जाती है। Car और Sale दोनों एक ही पीके साझा करते हैं और यह "1 से 0..1" रिश्ते है, जिसे Car और Sale विलय करके मॉडलिंग भी किया जा सकता है, और उचित जांच के साथ बिक्री के क्षेत्र न्यूल-सक्षम बनाने के लिए यह सुनिश्चित करने के लिए कि वे नहीं हो सकते "आंशिक रूप से पूर्ण"।

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

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