SET NULL มีวัตถุประสงค์ในการลบ / อัพเดทข้อ จำกัด กุญแจต่างประเทศอย่างไร?


15

ฉันอาจจะใจแคบ แต่ถ้าฉันสร้างข้อ จำกัด คีย์ต่างประเทศและแถวได้รับการปรับปรุงหรือลบฉันจะสูญเสียการเชื่อมต่อนั้นถ้าคอลัมน์ของตารางลูกได้รับการตั้งค่าเป็นโมฆะ

อะไรคือจุดประสงค์ของการเก็บแถวกำพร้าเหล่านี้ไว้โดยเจตนา?


ฉันกำลังมองหากรณีใช้งานและฉันไม่คิดว่าพวกเขาจะใช้เฉพาะฐานข้อมูล (อาจผิดที่นี่)
Derek Downey

ฉันไม่เคยเห็นกรณีการใช้งานสำหรับเรื่องนี้เช่นกัน ...
a_horse_with_no_name

คำตอบ:


13

ไม่ว่าset nullจะมีประโยชน์หรือไม่ขึ้นอยู่กับสิ่งที่คุณเลือกที่nullจะหมายถึงในบริบทเฉพาะ - ด้วยความสับสนและความคิดเห็นรอบnullIMO วิธีการที่เหมาะสมสำหรับ DBA

  1. เลือก (และเอกสาร) ความหมายของแต่ละฟิลด์ที่สามารถ nullable ได้
  2. ให้แน่ใจว่ามันหมายความว่าหนึ่งในสิ่งเดียว

ด้วยกฎเหล่านั้นให้พิจารณากรณีการใช้งานต่อไปนี้:

  • คุณมีโต๊ะ 'ร้าน' (เช่นสถานที่ส่วนตัว)
  • คุณมีโต๊ะ 'ผู้ค้าปลีก' (เช่นเชน)
  • ตาราง 'ร้านค้า' มีฟิลด์ค้นหาที่อ้างอิงถึงคีย์ของ 'ผู้ค้าปลีก'
  • คุณได้กำหนดnullให้เป็นตัวแทนร้านค้าอิสระ (เช่นร้านที่ไม่ได้เป็นส่วนหนึ่งของห่วงโซ่)
  • 'ผู้ค้าปลีก' ปิดสาขาจนถึงจุดที่คุณเห็นว่าร้านค้านั้นเป็นอิสระ

ในกรณีนี้on delete set nullมันสมเหตุสมผล มีวิธีอื่น ๆ ในการสร้างแบบจำลองกฎทางธุรกิจเหล่านี้ แต่นี่เป็นวิธีที่ง่ายที่สุดและถ้ามันเหมาะสมกับข้อเท็จจริงที่คุณสนใจในโลกแห่งความเป็นจริงฉันขอแนะนำให้มันสมบูรณ์แบบ


คะแนนที่ดีที่มีความหมายเข้มงวดเป็นโมฆะและตัวอย่างของคุณชัดเจนว่าทำไมนี่จึงเป็นคุณลักษณะ
Derek Downey

1

กรณีการใช้งานส่วนใหญ่ที่ฉันคิดได้โดยทั่วไปนั้นมีรูปแบบ "เอาล่ะเราสามารถทำสิ่งที่แตกต่างออกไป แต่เรารู้สึกว่าทำสิ่งนี้แทน"

พิจารณาownerฟิลด์สำหรับข้อบกพร่องในระบบติดตามปัญหาที่ บริษัท หากจอห์นหยุดทำงานแน่นอนว่าทุกปัญหาของเขาไม่ควรถูกลบเมื่อบัญชีของเขาถูกลบ ถึงแม้จะมีบางฐานข้อมูลที่อนุญาตให้SET DEFAULTเป็นการกระทำ (หรือมีทริกเกอร์ดำเนินงานเดียวกัน) และการมีNobodyพนักงานเป็นเจ้าของค่าเริ่มต้นของปัญหาอาจเป็นตัวเลือก หรือเราอาจมีdisabledสนามสำหรับจอห์นแทนที่จะลบบันทึกของเขา


3
ในกรณีนี้ฉันจะเถียงไม่อนุญาตให้ลบ ( RESTRICT) ถ้าไม่มีเหตุผลอื่นที่ชี้โทษพนักงานเก่าเมื่อมีสิ่งผิดปกติเกิดขึ้น!
Derek Downey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.