Saturday 15 May 2010

database design - How to enforce foreign key constraint from unrelated tables in Mysql? -


यह मेरा डीबी संरचना है छवि विवरण यहां दर्ज करें

यह वह स्क्रिप्ट है जो मैं तालिकाओं को बनाने में करता था <पूर्व> for_stkoverflow का उपयोग करें; तालिका उपयोगकर्ता समूह बनाएं (ग्रुपिड मेडिम्यूमन्ट नल एयूटीओएनसीसीसीमेंट, ग्रुपनाम VARCHAR (100), प्राइमरी की (`ग्रुप ')); CREATE TABLE User_det (Usrid MEDIUMINT नहीं NULL AUTO_INCREMENT, usrname VARCHAR (255), ग्रुप MEDIUMINT, प्राथमिक कुंजी ( `Usrid`), विदेश कुंजी (ग्रुप) संदर्भ usergroup (ग्रुप)); CREATE TABLE खाते (एसिड MEDIUMINT नहीं NULL AUTO_INCREMENT, ग्रुप MEDIUMINT, acname VARCHAR (255), प्राथमिक कुंजी ( `acid`), विदेश कुंजी (ग्रुप) संदर्भ usergroup (ग्रुप)); बनाने तालिका खाता बही (ledgerid MEDIUMINT नहीं NULL AUTO_INCREMENT, ledgername VARCHAR (255), एसिड mediumint, Usrid mediumint, प्राथमिक कुंजी (ledgerid), विदेश कुंजी (एसिड) का संदर्भ खाते (एसिड), विदेशी कुंजी (Usrid) का संदर्भ User_det (Usrid)) ;

मेरे पास निम्न डेटा दर्ज किया गया है

छवि दर्ज करें यहाँ विवरण

उपयोगकर्ता समूह

  ---------- - समूहड समूहनाम --------------- ----- - 1 समूह 1 - 2 समूह 2   

User_det

  -------- - यूरीड यूजरनाम समूह ----- ------------------ - 1 उपयोगकर्ता 1 1 - 2 उपयोगकर्ता 2 2   

खाते

  - ------- एसिड ग्रुपड एएनवीएन --------------------- 1 1 एसी 1 - 2 2 एसी 2   <पी> लेजर  
  -------- -लेग्जीड लीडडगेमेन एसिड युसिड -------------------------- ------ - 1 ledger1 1 1 - 2 ledger2 2 2 - 3 ledger3 1 2 - 4 ledger4 2 1 का चयन करें t1.ledgerid, t1.ledgername, t2.acname, t1 अंदरूनी के रूप में लेजर से t3.usrname शामिल हों खातों के रूप में टी 2 ऑन टी 1। एसिड = टी 2. एसिड इनर इन यूज़र यूट यूट यूज़र टी 3 ऑन टी 1 यूसीड = टी 3 यूसाइट;   

मौजूदा तालिका संरचना डीबी अखंडता का उल्लंघन करने वाले डेटा को सम्मिलित करने की अनुमति देता है।

प्रविष्टि लेजरड 3 अमान्य है ---------- ------------------------ क्योंकि एएनएनएन ए 1 समूह समूह 1 के अंतर्गत आता है जिसके लिए उपयोगकर्ता 2 का हिस्सा नहीं है। प्रवेश ledgerid 4

अवैध

क्योंकि acname AC2 ग्रुप 2 के अंतर्गत आता है जो User 1 का हिस्सा नहीं है करने के लिए।

मैं रोका जा सकता है इस तरह के डेटा डालने?

अभी आवेदन में मैं बीएल परत में PHP के माध्यम से यह चेक कर रहा हूं।

क्या मैं इसे डीबी स्तर पर लागू कर सकता हूं क्योंकि मैं पीएपी फ्रंट एंड का उपयोग किए बिना भी कुछ आयात करता हूं।

इस संबंध में संबंधों को पहचानना का उपयोग करें:

 यहाँ छवि विवरण दर्ज करें

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

यदि आप उन्हें अन्य उद्देश्यों के लिए आवश्यक हैं और / या वैकल्पिक ऊपर कुंजी (यानी अद्वितीय की कमी) ...


Btw, उपयोग और अधिक लगातार नामकरण - मैं हमेशा एकवचन का उपयोग कर और बिना काट-छांट तालिका नाम के साथ पीक फ़ील्‍डस लगाकर की सलाह देते हैं ...

No comments:

Post a Comment