ผมคิดว่าจำเป็นที่จะต้องเป็นคำที่แข็งแกร่งมากและในความหมายที่เข้มงวดตารางอาจไม่ต้องคีย์ตัวแทน
อย่างไรก็ตามหากเป็นฐานข้อมูลของฉันฉันอาจจะเพิ่มคีย์ตัวแทน ฉันอาจไม่ต้องการให้การออกแบบฐานข้อมูลของฉันขึ้นอยู่กับกลุ่มบุคคลที่สาม (IATA, ISO) โดยไม่คำนึงว่ามาตรฐานของพวกเขาจะเสถียรแค่ไหน หรือฉันอาจไม่ต้องการขึ้นอยู่กับมาตรฐานใด ๆ เลย (มีมาตรฐานรหัสสกุลเงินอื่นหรือไม่ฉันไม่รู้) ฉันอาจจะทำแบบจำลองตารางของฉันด้วยปุ่มตัวแทน:
+-------------------------+ +------------------------+
|Airport | |Country |
|-------------------------| |------------------------|
|airport_id int (PK)| |country_id int (PK) |
|iata_airport_code string | |iso_country_code string |
|icao_airport_code string | +------------------------+
|faa_identifier string |
|address string |
|name string |
+-------------------------+
+-------------------------+
|Currency |
|-------------------------|
|currency_id int (PK) |
|iso_currency_code string |
|name string |
+-------------------------+
กล่าวอีกนัยหนึ่งยกเว้นว่ารหัสมาตรฐานอุตสาหกรรมเหล่านั้นมีความสำคัญอย่างยิ่งต่อการสมัครของฉันฉันจะไม่ใช้พวกเขาเป็น PK ของตารางของฉัน พวกมันเป็นแค่ฉลาก ตารางอื่น ๆ ของฉันส่วนใหญ่อาจมีคีย์ตัวแทนอยู่แล้วและการตั้งค่านี้จะเพิ่มความสอดคล้องให้กับตัวแบบข้อมูลของฉัน ค่าใช้จ่ายในการ 'เพิ่ม' คีย์ตัวแทนจึงน้อยมาก
อัปเดตตามความคิดเห็นบางส่วน:
โดยไม่ทราบว่าบริบทของตารางตัวอย่างเป็นไปไม่ได้ที่จะรู้ว่าสิ่งที่สำคัญเช่นรหัสสนามบิน IATA นั้นมีผลต่อแอปพลิเคชันโดยใช้ฐานข้อมูล เห็นได้ชัดว่าหากรหัส IATA มีความสำคัญจากส่วนกลางและมีการใช้อย่างแพร่หลายทั่วทั้งแอปพลิเคชันอาจเป็นการตัดสินใจที่ถูกต้องหลังจากการวิเคราะห์ที่ถูกต้องเพื่อใช้รหัสเป็น PK ของตาราง
อย่างไรก็ตามหากตารางเป็นเพียงตารางการค้นหาที่ใช้ในบางมุมของแอปความสำคัญสัมพัทธ์ของรหัส IATA อาจไม่แสดงให้เห็นถึงจุดที่โดดเด่นในโครงสร้างพื้นฐานของฐานข้อมูล แน่นอนว่าคุณอาจต้องเพิ่มการเข้าร่วมในแบบสอบถามไม่กี่ที่นี่และที่นั่น แต่ความพยายามนั้นอาจเล็กน้อยเมื่อเทียบกับความพยายามที่จะใช้ในการทำวิจัยเพื่อให้แน่ใจว่าคุณเข้าใจความหมายของการทำรหัส IATA อย่างสมบูรณ์ เขตข้อมูลคีย์หลัก ในบางกรณีไม่เพียง แต่ฉันไม่สนใจ แต่ฉันไม่ต้องการที่จะดูแลเกี่ยวกับรหัส IATA ความคิดเห็นของ @James Snell ด้านล่างเป็นตัวอย่างที่สมบูรณ์แบบของบางสิ่งที่ฉันอาจไม่ต้องกังวลเกี่ยวกับการส่งผลกระทบต่อ PK ของตารางของฉัน
นอกจากนี้ความสม่ำเสมอในการออกแบบก็มีความสำคัญเช่นกัน หากคุณมีฐานข้อมูลที่มีหลายสิบตารางที่ทุกคนมีการออกแบบกุญแจตัวแทนอย่างต่อเนื่องและจากนั้นตารางการค้นหาบางอย่างที่ใช้รหัสบุคคลที่สามเป็น PK นั้นจะแนะนำความไม่สอดคล้องกัน มันไม่ได้เลวร้ายอะไรทั้งสิ้น แต่มันก็ต้องให้ความสนใจเป็นพิเศษในเอกสารประกอบและสิ่งเหล่านั้นอาจไม่ได้รับการรับประกัน พวกเขากำลังค้นหาตารางเพื่อเห็นแก่ความดีเพียงแค่ใช้กุญแจตัวแทนเพื่อความมั่นคงก็ดีมาก
อัพเดทจากการวิจัยเพิ่มเติม:
โอเคอยากรู้อยากเห็นฉันและฉันตัดสินใจที่จะทำการวิจัยเกี่ยวกับรหัสสนามบิน IATA เพื่อความสนุกสนานเริ่มต้นด้วยลิงก์ที่ให้ไว้ในคำถาม
ตามที่ปรากฏรหัส IATA ไม่เป็นสากลและมีสิทธิ์ตามคำถามทำให้พวกเขาเป็น ตามหน้านี้ :
ประเทศส่วนใหญ่ใช้รหัส ICAOสี่ตัวอักษรไม่ใช่รหัส IATA ในสิ่งพิมพ์ทางการบินของพวกเขา
นอกจากนี้รหัส IATA และรหัส ICAO นั้นแตกต่างจากรหัส FAA Identifierซึ่งเป็นอีกวิธีหนึ่งในการระบุสนามบิน
จุดประสงค์ของฉันในการนำสิ่งเหล่านี้มาใช้ไม่ได้เป็นการเริ่มต้นการถกเถียงกันว่ารหัสใดดีกว่าหรือเป็นสากลมากขึ้นหรือมีอำนาจมากกว่าหรือครอบคลุมมากกว่า แต่เพื่อแสดงให้เห็นอย่างชัดเจนว่าทำไมการออกแบบโครงสร้างฐานข้อมูลของคุณ , เว้นแต่มีเหตุผลที่ธุรกิจเฉพาะให้ทำเช่นนั้น
ในกรณีนี้ฉันรู้สึกว่าฐานข้อมูลของฉันจะมีโครงสร้างที่ดีกว่ามีความเสถียรและยืดหยุ่นมากขึ้นโดยการบังคับใช้รหัส IATA (หรือบุคคลที่สามหรือรหัสที่อาจเปลี่ยนแปลงได้) ในฐานะผู้สมัครคีย์หลักและใช้คีย์ตัวแทน โดยการทำเช่นนั้นฉันสามารถทิ้งข้อผิดพลาดที่อาจเกิดขึ้นเนื่องจากการเลือกคีย์หลัก