ตารางการค้นหา (หรือตารางรหัสตามที่บางคนเรียกพวกเขา) มักจะเป็นชุดของค่าที่เป็นไปได้ที่สามารถกำหนดสำหรับคอลัมน์ที่แน่นอน
ตัวอย่างเช่นสมมติว่าเรามีตารางการค้นหาที่เรียกว่าparty
(หมายถึงการเก็บข้อมูลเกี่ยวกับพรรคการเมือง) ที่มีสองคอลัมน์:
party_code_idn
ซึ่งเก็บค่าตัวเลขที่ระบบสร้างขึ้นและ (ขาดความหมายโดเมนธุรกิจ ) ทำงานเป็นตัวแทนสำหรับคีย์จริงparty_code
เป็นกุญแจจริงหรือ "ธรรมชาติ" ของตารางเนื่องจากจะรักษาค่าที่มีนัยยะของโดเมนธุรกิจ
และให้เราบอกว่าตารางดังกล่าวเก็บข้อมูลที่ตามมา:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
party_code
คอลัมน์ซึ่งช่วยให้ค่า 'รีพับลิกัน' และ 'ประชาธิปไตย' เป็นสำคัญที่แท้จริงของตารางมีการตั้งค่าที่มีข้อ จำกัด ที่ไม่ซ้ำกัน แต่ผมเลือกที่จะเพิ่มparty_code_idn
และกำหนดเป็น PK ของตาราง (แม้ว่าเหตุผลที่พูด , party_code
อาจทำงานเป็นคีย์หลัก [PK])
คำถาม
แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการชี้ไปยังค่าการค้นหาจากตารางธุรกรรมคืออะไร ฉันควรสร้างการอ้างอิงต่างประเทศ (FK) อ้างอิงทั้ง(a)โดยตรงกับค่าที่เป็นธรรมชาติและมีความหมายหรือ(b)เพื่อแทนค่า?
ตัวเลือก (a)ตัวอย่างเช่น
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
มีคุณสมบัติดังต่อไปนี้1 :
- สามารถอ่านได้สำหรับผู้ใช้ (+)
- ง่ายต่อการนำเข้าส่งออกข้ามระบบ (+)
- เปลี่ยนแปลงค่าได้ยากเนื่องจากต้องการการแก้ไขในตารางอ้างอิงทั้งหมด (-)
- การเพิ่มค่าใหม่นั้นไม่มีค่าใช้จ่าย (=)
ฉันคิดว่ามันเกือบจะเหมือนกับ "การส่งผ่านค่า " เพื่อดึงความคล้ายคลึงจากการเรียกใช้ฟังก์ชันในศัพท์แสงการเขียนโปรแกรมประยุกต์
ตัวเลือก (b)เช่น
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
มีคุณสมบัติด้านล่าง:
- ไม่สามารถอ่านได้สำหรับผู้ใช้ (-)
- ยากที่จะนำเข้าส่งออกเนื่องจากเราจำเป็นต้องยกเลิกการอ้างอิง (-)
- เปลี่ยนค่าได้ง่ายเนื่องจากเราเก็บเฉพาะการอ้างอิงในตารางธุรกรรม (+)
- การเพิ่มค่าใหม่นั้นไม่มีค่าใช้จ่าย (=)
มันคล้ายกับ“ การส่งผ่านอ้างอิง ” หากเปรียบเทียบกับการเรียกใช้ฟังก์ชันในสำนวนการเขียนโปรแกรมแอป
การนำเข้า - ส่งออกสามารถทำได้ในลักษณะที่แตกต่างกันเช่นเพียงเติมตารางการค้นหาอีกครั้งจากนั้นจึงทำการเติมคอลัมน์คอลัมน์ตัวแทน ฉันหวังว่าฉันจะได้รับสิทธินี้เป็นสิ่งที่ฉันเพิ่งได้ยินว่าเป็นไปได้
1. โปรดทราบว่า+
, -
และ=
บ่งบอกถึงประโยชน์ของคุณสมบัติเหล่านั้น
คำถาม
ค่อนข้างสำคัญ: มีความแตกต่างระหว่างตารางการค้นหา (หรือรหัส ) และการอ้างอิง FK หรือไม่หากเราจะใช้วิธีการหลัง? ฉันคิดว่าพวกเขาทำงานเหมือนกัน