के साथ अद्वितीय कुंजी इस प्रश्न को कुछ काल्पनिक पृष्ठभूमि की आवश्यकता है। आइए employee
तालिका पर कॉल करें जिसमें कॉलम name
, date_of_birth
, title
, salary
, MySQL का उपयोग RDBMS के रूप में करते हैं। चूंकि किसी दिए गए व्यक्ति के पास एक ही व्यक्ति और जन्म तिथि किसी अन्य व्यक्ति के रूप में होती है, तो वे परिभाषा के अनुसार, एक ही व्यक्ति (अद्भुत संयोग छोड़कर जहां हमारे पास अब्राहम लिंकन नामक दो लोग 12 फरवरी, 180 9 को पैदा हुए हैं), हम एक डाल देंगे name
और date_of_birth
पर अद्वितीय कुंजी का अर्थ है "एक ही व्यक्ति को दो बार स्टोर न करें।"NULLs
id name date_of_birth title salary
1 John Smith 1960-10-02 President 500,000
2 Jane Doe 1982-05-05 Accountant 80,000
3 Jim Johnson NULL Office Manager 40,000
4 Tim Smith 1899-04-11 Janitor 95,000
अब मैं निम्नलिखित बयान चलाने का प्रयास करते हैं, तो यह चाहिए और असफल हो जायेगी:
INSERT INTO employee (name, date_of_birth, title, salary)
VALUES ('Tim Smith', '1899-04-11', 'Janitor', '95,000')
अगर मैं इस एक कोशिश है, यह सफल होगा:
INSERT INTO employee (name, title, salary)
VALUES ('Jim Johnson', 'Office Manager', '40,000')
अब इस डेटा पर विचार
और अब अपने डेटा इस तरह दिखेगा:
id name date_of_birth title salary
1 John Smith 1960-10-02 President 500,000
2 Jane Doe 1982-05-05 Accountant 80,000
3 Jim Johnson NULL Office Manager 40,000
4 Tim Smith 1899-04-11 Janitor 95,000
5 Jim Johnson NULL Office Manager 40,000
यह वही नहीं है जो मैं चाहता हूं लेकिन मैं नहीं कह सकता कि मैं जो हुआ उससे पूरी तरह से असहमत हूं। अगर हम गणितीय सेट के संदर्भ में बात करते हैं,
{'Tim Smith', '1899-04-11'} = {'Tim Smith', '1899-04-11'} <-- TRUE
{'Tim Smith', '1899-04-11'} = {'Jane Doe', '1982-05-05'} <-- FALSE
{'Tim Smith', '1899-04-11'} = {'Jim Johnson', NULL} <-- UNKNOWN
{'Jim Johnson', NULL} = {'Jim Johnson', NULL} <-- UNKNOWN
मेरा अनुमान है कि MySQL कहते हैं, "जब से मैं पता नहीं है कि एक NULL
जन्म तिथि के साथ पहले से ही इस तालिका में नहीं है जिम जॉनसन, मैं उसे जोड़ देंगे। "
मेरा प्रश्न है: मैं डुप्लिकेट को कैसे रोक सकता हूं भले ही date_of_birth
हमेशा ज्ञात नहीं है? सबसे अच्छा मैं अब तक आया हूं date_of_birth
को एक अलग तालिका में ले जाना है। हालांकि, इसके साथ समस्या यह है कि मैं एक ही नाम, शीर्षक और वेतन, अलग जन्म तिथियों के साथ दो कैशियर, डुप्लिकेट किए बिना दोनों को स्टोर करने का कोई तरीका नहीं कह सकता हूं।
जन्म का नाम और तारीख बहुत अनोखी नहीं है। –
एक सेंटीनेल जन्म तिथि का उपयोग करें, उदा। '0000-00-00'। – smilingthax
@ पॉल टॉम्बलिन: मुझे पता है कि वे नहीं हैं। क्या आप नहीं देख सकते कि सवाल यह नहीं है कि यद्यपि सवाल क्या है? –