ค่อนข้างใหม่ในการใช้ฐานข้อมูล SQL มาตรฐาน (ปัจจุบันทำงานกับ MySQL เป็นส่วนใหญ่) ฉันยังไม่ได้ใช้ในการใช้งานมากมายในตอนนี้
เมื่อใดและเพราะเหตุใดจึงมีประโยชน์ที่จะมีการทำดัชนีคีย์ (หรือค่อนข้างเซ็นสัญญา) ลบตาราง?
ค่อนข้างใหม่ในการใช้ฐานข้อมูล SQL มาตรฐาน (ปัจจุบันทำงานกับ MySQL เป็นส่วนใหญ่) ฉันยังไม่ได้ใช้ในการใช้งานมากมายในตอนนี้
เมื่อใดและเพราะเหตุใดจึงมีประโยชน์ที่จะมีการทำดัชนีคีย์ (หรือค่อนข้างเซ็นสัญญา) ลบตาราง?
คำตอบ:
คีย์หลักทั้งหมดคือค่าที่เรากำหนดไว้คือค่าที่สำคัญที่สุดในเรคคอร์ด ไม่ว่าคีย์นั้นจะเป็น int ที่ถูกลงนาม, int ที่ไม่ได้ลงนาม, สตริง, blob (อันที่จริง, มีข้อ จำกัด ) หรือ UUID (หรือชื่ออะไรก็ตามที่ใช้ในปัจจุบัน), ความจริงก็ยังคงเป็นกุญแจสำคัญ, และมันเป็น สิ่งที่สำคัญที่สุด
เนื่องจากเราไม่ได้ถูก จำกัด ให้ใช้เฉพาะตัวเลขเชิงบวกสำหรับคีย์ของเราดังนั้นจึงควรพิจารณาว่า int ที่ลงนามแล้วจะมีมูลค่าเพียง 2 พันล้านเท่านั้นในขณะที่ int ที่ไม่ได้ลงนามจะไปถึง 4 พันล้านคน แต่ไม่มีอะไรผิดปกติกับการใช้ int ที่ลงนามตั้งค่าเริ่มต้นเป็น ~ -2 พันล้านและตั้งค่าที่เพิ่มขึ้นหนึ่ง หลังจาก ~ 2 พันล้านแผ่นคุณจะถูกบันทึกเป็น "ศูนย์" จากนั้นคุณจะไปถึง 2 พันล้านรายการ
ทำไมถึงมีประโยชน์ที่จะมี "คีย์ลบ" ในตารางนั่นเป็นคำถามเดียวกันกับ "ทำไมจึงมีประโยชน์ในการมีคีย์ในตาราง" "ค่า" ของคีย์ไม่มีผลกระทบต่อสถานะของคีย์ กุญแจคือกุญแจคือกุญแจ
สิ่งสำคัญคือถ้าคีย์นั้นถูกต้อง
ทำไมจึงเป็นประโยชน์ในการอนุญาตให้ใช้คีย์ที่เป็นลบฉันสามารถแนะนำเหตุผลบางอย่าง:
จะเกิดอะไรขึ้นถ้าคุณต้องการระบุผลตอบแทนในระบบการขายเป็นหมายเลขคำสั่งขายเชิงลบที่ตรงกับหมายเลขคำสั่งขายที่เป็นบวกจึงทำให้สหสัมพันธ์ง่ายขึ้น (นี่คือความไร้เดียงสาและการออกแบบที่ไม่ดี
จะเกิดอะไรขึ้นถ้าคุณต้องการมีตารางผู้ใช้และระบุว่าคนที่มีตัวเลขติดลบนั้นเป็นระบบควบคุม
ฉันสามารถไปต่อได้ แต่จริงๆแล้วเหตุผลเดียวที่จำนวนการเป็นลบนั้นสำคัญคือถ้าคุณหรือฉันให้ความสำคัญกับมัน นอกเหนือจากนั้นไม่มีเหตุผลที่ยอดเยี่ยมสำหรับค่าของคีย์ที่มีการแบกบนตัวเอง
หากเราอยู่ในคอลัมน์ข้อมูลประจำตัวหรือจำนวนอัตโนมัติค่านั้นไม่ควรมีความหมาย (บางครั้งก็ทำตามที่ผู้ใช้แชทพูดถึงโดย drachenstern ซึ่งฉันทำมาก่อนหน้านี้แล้ว)
อย่างไรก็ตามโดยทั่วไปคุณจะสูญเสียช่วงครึ่งหนึ่งหากคุณใช้จำนวนเต็มที่ลงนามแล้ว
ดู: จะทำอย่างไรเมื่อเขตข้อมูลในตารางใกล้จำนวนเต็มสูงสุดที่มีการลงชื่อหรือไม่มีลายเซ็น 32 บิต
ตัวอย่างอื่น: ในสถานการณ์จำลองแบบขนาดเล็กการใช้ค่าลบสำหรับหนึ่งไซต์และบวกสำหรับอีกไซต์หนึ่งจะให้ความรู้โดยนัยเกี่ยวกับแหล่งที่มาของแถวใดแถวหนึ่ง
NOT FOR REPLICATION
ที่คุณรู้หรือไม่?
ไม่ใช่ทุกระบบฐานข้อมูลที่รองรับประเภทจำนวนเต็มที่ไม่ได้ลงชื่อ MSSQL เป็นหนึ่งในที่ไม่ได้ ในกรณีเหล่านี้ค่าลบอาจเป็นไปได้ในฟิลด์คีย์จำนวนเต็มเพียงเพราะเป็นไปได้ในประเภท (คุณสามารถใช้กฎหรือทริกเกอร์เพื่อบล็อกดังที่แสดงในตัวอย่างนี้แต่อาจไม่จำเป็นต้องเพิ่มค่าใช้จ่ายในการบังคับใช้กฎดังกล่าว ทุก ๆ ทางแยก / อัปเดต)
เท่าที่ฐานข้อมูลเกี่ยวข้องค่าจริงของคีย์หลักไม่สำคัญตราบใดที่มันไม่ซ้ำกันภายในตาราง ไปที่ -42 และ 42 เป็นเพียงตัวเลขสองตัวที่แตกต่างกันในแบบเดียวกับที่ 42 และ 69 หมายถึงความหมายจะถูกปฏิเสธในเชิงลบหรือไม่คุ้มค่าด้วยรหัสของคุณ
การไม่สนับสนุนประเภทจำนวนเต็มที่ไม่ได้ลงนามอาจเป็นการตัดสินใจออกแบบตามการลดความซับซ้อน - เช่นไม่ต้องการชนิดจำนวนเต็ม 32 บิตสองชนิดที่แตกต่างกันเพื่อกังวลเกี่ยวกับการตรวจสอบช่วงเมื่อกำหนดค่าระหว่างพวกเขา มัน จำกัด จำนวนดัชนีที่เป็นไปได้ในฟิลด์การเพิ่มอัตโนมัติโดยเริ่มจาก 0 หรือ 1 ถึงครึ่งสิ่งที่เป็นไปได้ในประเภทที่ไม่ได้ลงนาม (~ 2e9 มากกว่า ~ 4e9) แต่นี่ไม่ค่อยเป็นปัญหาสำคัญ (ถ้าคุณต้องการ จำนวนของค่าคีย์ของขนาดนั้นคุณอาจไปสำหรับชนิด 64 บิตต่อไปโดยเฉพาะอย่างยิ่งถ้าใช้สถาปัตยกรรม 64 บิตซึ่งค่าดังกล่าวจะถูกประมวลผลอย่างมีประสิทธิภาพไม่น้อยกว่านั้นเป็น 32- บิต) แต่ถ้าคุณต้องการเต็มช่วงและต้องการ เพื่อยึด 32 บิตด้วยเหตุผลด้านพื้นที่คุณสามารถเริ่มเพิ่มได้ที่ -2,147,483,647