วิธีเลือก Primary Key สำหรับ RDBMS
วันนี้ search web ไปเรื่อยๆ เจอหัวข้อนึงใน stackoverflow ตามลิ้งค์ด้านล่าง
ผมก็แวะไปนั่งอ่านมา เจอแนวคิดน่าสนใจอยู่
สมมติว่าคุณต้องสร้าง Table บน RDBMS ชื่อว่า `citizen` column ที่จะต้องเก็บก็มี ชื่อ, นามสกุล ตารางนี้ใช้เก็บรายชื่อของประชาชนคนไทย คุณจะเลือก field ไหนเป็น Primary Key
เชื่อว่าคนกว่า 80% จะต้องมีเสียงโผล่มาในสมองบอกว่า “ก็ใช้ชื่อและนามสกุลเป็น Primary Key สิ” ใช่ไหมครับ? ลองคิดดูใหม่อีกครั้งครับว่าใช้ชื่อและนามสกุลเป็น Composite Primary Key เหมาะสมแล้วหรือ?
เรามักจะนึกว่าชื่อและนามสกุลของคนไทยทุกคนไม่น่าจะซ้ำกัน ดังนั้นก็ไม่น่าจะมีปัญหาอะไร แต่เชื่อเถอะครับ มันมีซ้ำกันแน่นอน ลองค้น google ดูได้ครับ
ลองจินตนาการดูครับว่าเราต้องพัฒนาโปรแกรมให้รัฐบาลใช้เก็บข้อมูลประชากร ต้องย้ายจากฐานข้อมูลเดิม มาใช้ระบบใหม่ของเรา แต่เราดันตั้ง Primary Key เป็นชื่อกับนามสกุล รับรองย้ายข้อมูลไม่ผ่านแน่นอน
สมมติเรื่องต่อ ถ้าเพิ่มอีก column นั่นก็คือ หมายเลขบัตรประชาชน เราจะเปลี่ยนมาใช้ column นี้เป็น Primary Key ไหมครับ? นึกคำตอบไว้ในใจนะครับ
ถ้าคุณตอบใช่ นั่นก็คือเปลี่ยนมาใช้หมายเลขบัตรประชาชนนี่แหละเป็น Primary Key ผมเชื่อว่าประวัติศาสตร์ต้องซ้ำรอยอีกครั้งแน่นอน
สมมติว่าประเทศอื่นมีการใช้ pattern หมายเลขบัตรประชาชนแบบเดียวกับเรา ถ้าวันหนึ่งรัฐบาลบอกว่าจะใช้ระบบนี้เก็บข้อมูลนักท่องเที่ยวต่างชาติด้วย รับรองนักท่องเที่ยวเข้าประเทศเราไม่ได้แน่ๆ เพราะหมายเลขบัตรประชาชนซ้ำกัน ระบบพังอีกครั้ง
ทีนี้ทำอย่างไรดี? ตำตอบก็คือ ใช้ Primary Key เป็น running number ครับ บาง Database จะมีระบบ auto-increment ทำให้เราจะได้ความสามารถนี้มาโดยอัตโนมัติ
หรือบางครั้งถ้าเราไม่อยากพึ่ง Database มาก เราอาจจะใช้ UUID มาแทน Primary Key ที่เป็น auto-increment
จากนั้นในช่วงแรก เราสามารถตั้งชื่อและนามสกุลให้เป็น Unique Key ไว้ก่อน หากเจอปัญหาว่าชื่อและนามสกุลมันไม่ unique อีกต่อไปก็เพียงลบ Unique Key ออกไปและใส่ Unique Key ให้ column ใหม่ที่ต้องการนั่นเอง
ดังนั้นเมื่อใดก็ตามที่เราจะตั้ง column ที่ใช้เก็บข้อมูลเป็น Primary Key ก็ขอให้นึกถึงบทความนี้เข้าไว้นะครับ
บทความนี้ค่อนข้างจะเป็นความคิดเห็นเสียมากกว่า ไม่ถึงขั้นบังคับว่าต้องทำแบบนี้เท่านั้น ศึกษาไว้เป็นแนวคิดเพื่อที่เราจะได้หยิบมาใช้เมื่อถึงเวลาอันควร






