ความถูกต้องชั่วคราวและความสัมพันธ์หลัก / ต่างประเทศที่สำคัญ


11

ฉันได้อ่านบทเรียนเกี่ยวกับ oracle หลายตัวที่แสดงถึงความถูกต้องทางเวลาและคุณสมบัติ อย่างไรก็ตามในตัวอย่างที่ฉันอ่านไม่มีคีย์หลักที่ใช้ในตารางตัวอย่าง

http://docs.oracle.com/cd/E16655_01/appdev.121/e17620/adfns_design.htm#ADFNS1005 http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm /temporal/temporal.html

ควรเพิ่มคีย์หลักในตารางเหล่านี้หรือไม่ ฉันกำลังถามเพราะฉันสงสัยว่าตารางอ้างอิงหนึ่งในตารางชั่วคราวเหล่านี้ควรจะอ้างอิงได้อย่างไร ฉันสามารถเพิ่มคีย์ต่างประเทศจากตารางชั่วคราวหนึ่งไปยังอีกตารางหนึ่งได้หรือไม่

ถ้าฉันเพิ่ม pk / foreign key realtionship จากนั้นอัปเดตการอ้างอิงในตารางด้วย pk ตารางที่มีจุด fk ไปยังระเบียนที่ไม่เกี่ยวข้องอีกต่อไป .... ข้อมูลทางโลกแตกคีย์หลักปกติปกติ - foreign key ความสัมพันธ์? และถ้าเป็นเช่นนั้นสิ่งนี้มีผลต่อประสิทธิภาพอย่างไรฉันจะใช้คอลัมน์ปกติเป็น 'foreign key' และเลือกคอลัมน์ที่ถูกต้องสำหรับช่วงเวลาอ้างอิงในแบบสอบถาม

ไม่มีใครรู้หรือมีตัวอย่างหรือแบบฝึกหัดที่มีประโยชน์ซึ่งแสดงข้อมูลชั่วคราวด้วยการใช้ pk / fk แบบหลอกหรือปกติ?

ขอบคุณ

คำตอบ:


2

น่าเสียดายที่ปัจจุบัน SQL หรือการใช้งานในผลิตภัณฑ์ RDBMS ทั้งหมดไม่สนับสนุนความสัมพันธ์ทางโลกอย่างสมบูรณ์

Teradata และ DB2 เท่านั้นที่มีคุณลักษณะบางอย่างที่ใช้ข้อ จำกัด ที่มีเวลาอยู่ในคอลัมน์สองคอลัมน์ขึ้นไป

ตัวอย่างของฉัน:

ชุดทดสอบ SCHEMA;

สร้างผลิตภัณฑ์ตาราง (
product_ID INT ไม่ใช่ค่า NULL,
NVARCHAR ที่เหนือกว่า (50),
คีย์หลัก (product_ID)
);

สร้างตารางแคมเปญ (
แคมเปญ _ID INT ไม่ใช่ค่า NULL,
product_ID INT ไม่ใช่ค่า NULL,
ราคา DECIMAL,
คีย์หลัก (campaign_ID)
)
;

แก้ไขตารางแคมเปญ
เพิ่มข้อ จำกัด XFK_campaign_productid
คีย์ต่างประเทศ (product_ID) อ้างอิงผลิตภัณฑ์ (product_id)
บนการลบไม่ดำเนินการใด ๆ

หากคุณเพิ่มคอลัมน์ชั่วคราว business_startdate และ business_enddate และเป็นทางเลือก
transaction_starttime และ transaction_endtime คุณจะไม่สามารถบังคับใช้ Referential Integrity ได้อีก

คุณอาจต้องใช้ทริกเกอร์หรือขั้นตอนการจัดเก็บหรือการเข้ารหัสระดับแอปพลิเคชันหากคุณต้องการใช้ข้อ จำกัด เช่นนี้:

สร้างแคมเปญตาราง (
campaign_id INT NOT NULL,
product_id INT NOT NULL,
วัน business_startdate ไม่เป็นโมฆะ,
business_enddate วันที่ไม่เป็นโมฆะ,
transaction_starttime ลงเวลาไม่เป็นโมฆะ,
transaction_endtime ลงเวลาไม่เป็นโมฆะ,
ทศนิยมราคา
คีย์หลัก (campaign_id, business_startdate, transaction_starttime)
)
;

สำหรับ DB2 จะมีหมายเลขหลักหลักชั่วคราวในไวยากรณ์ต่อไปนี้:

สร้างแคมเปญตาราง (
campaign_id INT NOT NULL,
product_id INT NOT NULL,
วัน business_startdate ไม่เป็นโมฆะ,
วัน business_enddate ไม่เป็นโมฆะ,
ทศนิยมราคา
ระยะเวลา BUSINESS_TIME (business_startdate, business_enddate)
คีย์หลัก (campaign_id, BUSINESS_TIME โดยไม่มีการทับซ้อน)
)
;


คุณสามารถให้ลิงค์เกี่ยวกับคุณลักษณะที่ใช้ข้อ จำกัด ที่มีเวลาอยู่ในคอลัมน์สองคอลัมน์ขึ้นไปได้หรือไม่?
AK

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.