มีสองตาราง:
- ผู้ใช้งาน
- ที่อยู่
ผู้ใช้มีการอ้างอิงถึงที่อยู่
ที่อยู่มีคอลัมน์ CreatedBy และ ModifiedBy ซึ่งอ้างอิงถึงผู้ใช้
ฉันจะออกแบบฐานข้อมูลนี้เพื่อหลีกเลี่ยงการพึ่งพาแบบวนซ้ำได้อย่างไร
มีสองตาราง:
ผู้ใช้มีการอ้างอิงถึงที่อยู่
ที่อยู่มีคอลัมน์ CreatedBy และ ModifiedBy ซึ่งอ้างอิงถึงผู้ใช้
ฉันจะออกแบบฐานข้อมูลนี้เพื่อหลีกเลี่ยงการพึ่งพาแบบวนซ้ำได้อย่างไร
คำตอบ:
แทนที่จะค้นหาเคล็ดลับและกลเม็ด (รวมถึงข้อ จำกัด ที่รอการตัดบัญชี) ฉันขอแนะนำให้คุณออกแบบวิธีออกจาก "ล็อคการอ้างอิง" นี้ - ลองทำดังนี้:
ข้อเท็จจริง
(UserID)
มีผู้ใช้อยู่(AddressID)
ถูกสร้างขึ้นโดยผู้ใช้(UserID)
(AddressID)
ที่ถูกสร้างขึ้นในวันที่(DateCreated)
(AddressID)
ได้รับการปรับปรุงครั้งสุดท้ายโดยผู้ใช้(UserID)
ในวันที่(ModifiedOn)
(UserID)
อยู่ที่อยู่(AddressID)
ตั้งแต่วันที่(ValidFrom)
ข้อ จำกัด
Each
ที่อยู่ถูกสร้างขึ้นโดยผู้ใช้exactly one
It is possible that more than one
ที่อยู่ถูกสร้างขึ้นโดยผู้ใช้the same
Each
ที่อยู่ที่ถูกสร้างขึ้นในวันที่exactly one
It is possible that more than one
ที่อยู่ที่ถูกสร้างขึ้นในวันที่the same
For each
ที่อยู่ and
วันที่ , that
ที่อยู่ได้รับการแก้ไขโดยat most one
ผู้ใช้ในวันที่that
For each
ผู้ใช้ and
วัน , that
ผู้ใช้อาศัยat most one
อยู่ตั้งแต่วันที่that
ตรรกะ
เท่าที่จำเป็นต้องมีที่อยู่บังคับตรวจสอบว่าในใบสมัครชั้นและห่องบโหลดลงในการทำธุรกรรม - วิธีที่คุณจะได้รับทั้งหมดหรือไม่มีอะไร
คุณไม่มีทางเลือก แต่เพื่อสร้างการพึ่งพาแบบวนซ้ำใน 2 การดำเนินการดังต่อไปนี้เนื่องจากไม่มีตารางหนึ่งอยู่เมื่อคุณสร้างตารางแรก
CREATE TABLE A (A_ID INT PRIMARY KEY, B_FK INT);
CREATE TABLE B (B_ID INT PRIMARY KEY, A_FK INT REFERENCES A(A_ID));
ALTER TABLE A ADD B_FK INT;
หากคุณต้องการหลีกเลี่ยงการพึ่งพาแบบวนซ้ำ จากนั้นคุณต้องลบข้อ จำกัด ผู้อ้างอิงหนึ่งข้อหรือคุณสามารถเพิ่มการอ้างอิงแบบ DELETE และ UPDATE แบบเรียงซ้อนในทางเดียว คุณสามารถใช้ทริกเกอร์ถ้าตรรกะของคุณค่อนข้างซับซ้อน