Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक लाख मामले में 1 की अनुमति देने के लिए डेटाबेस स्कीमा की संरचना कैसे करें?

ऐसा लगता है कि आपकी इसमें रुचि है:

-- a and b are related by the association of interest
Foo(a, b)

-- foo(a, b) but not foo(a2, b) for some a2 <> a
Boring(a, b)
unique(b)
FK (a, b) references Foo

-- foo(a, b) and foo(a2, b) for some a2 <> a
Rare(a, b)
FK (a, b) references foo

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

Rare = select * from Foo f join Foo f2
    where f.a <> f2.a and f.b = f2.b

कोई अन्य डिज़ाइन डेटाबेस को सुसंगत रखने में अद्यतन जटिलता से ग्रस्त है।

रेयर के फू से बहुत छोटे होने के बारे में आपको कुछ अस्पष्ट चिंता है। लेकिन आपकी आवश्यकता क्या है? लाखों फू रिकॉर्ड्स में से केवल n ही कई हैं:कई जिनके द्वारा आप कोई अन्य डिज़ाइन चुनेंगे?

जटिलता का अगला स्तर फू और रेयर होना है। अपडेट को उपरोक्त समीकरण को सही रखना होगा।

ऐसा बहुत कम लगता है कि केवल बोरिंग + रेयर होने और उनसे फू को फिर से बनाने से फू + रेयर की 2-या-3-इन-ए-मिलियन रिडंडेंसी को कम करने में कोई लाभ होता है। लेकिन बोरिंग के लिए एक अद्वितीय इंडेक्स (बी) को परिभाषित करना फायदेमंद हो सकता है जो यह बनाए रखेगा कि इसमें बी में केवल एक ए है। जब आपको फू की आवश्यकता हो:

Foo = select * from Boring union select * from Rare

लेकिन आपके अपडेट को इसे बनाए रखना चाहिए

not exists (select * from Boring b join Rare r where b.b = r.b)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. फास्ट स्ट्रिंग मिलान MySQL क्वेरी

  2. MySQL में टेक्स्ट आयात करना:अजीब प्रारूप

  3. मापदंडों के साथ MySQL स्क्रिप्ट

  4. क्या मुझे MySQL TEXT प्रकार के लिए PDO PARAM_LOB या PARAM_STR का उपयोग करना चाहिए?

  5. MySQL तालिका में अनुक्रमणिका दिखाएं