avatarTanapol Nearunchorn

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

1250

Abstract

ว่าใช้ชื่อและนามสกุลเป็น Composite Primary Key เหมาะสมแล้วหรือ?</p><p id="17e5">เรามักจะนึกว่าชื่อและนามสกุลของคนไทยทุกคนไม่น่าจะซ้ำกัน ดังนั้นก็ไม่น่าจะมีปัญหาอะไร แต่เชื่อเถอะครับ มันมีซ้ำกันแน่นอน ลองค้น google ดูได้ครับ</p><div id="4ecf" class="link-block"> <a href="https://www.google.co.th/?ion=1&amp;espv=2#q=%E0%B8%8A%E0%B8%B7%E0%B9%88%E0%B8%AD+%E0%B8%99%E0%B8%B2%E0%B8%A1%E0%B8%AA%E0%B8%81%E0%B8%B8%E0%B8%A5+%E0%B9%80%E0%B8%AB%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%99%E0%B8%81%E0%B8%B1%E0%B8%99"> <div> <div> <h2>Google</h2> <div><h3>โปรแกรมโฆษณา ทางออกทางธุรกิจ +Google เกี่ยวกับ Google ทั้งหมด Google.com</h3></div> <div><p>www.google.co.th</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/)"></div> </div> </div> </a> </div><p id="00f1">ลองจินตนาการดูครับว่าเราต้องพัฒนาโปรแกรมให้รัฐบาลใช้เก็บข้อมูลประชากร ต้องย้ายจากฐานข้อมูลเดิม มาใช้ระบบใหม่ของเรา แต่เราดันตั้ง Primary Key เป็นชื่อกับนามสกุล รับรองย้ายข้อมูลไม่ผ่านแน่นอน</p><p id="eed0">สมมติเรื่องต่อ ถ้าเพิ่มอีก column นั่นก็คือ หมายเลขบัตรประชาชน เราจะเปลี่ยน

Options

มาใช้ column นี้เป็น Primary Key ไหมครับ? นึกคำตอบไว้ในใจนะครับ</p><p id="f333">ถ้าคุณตอบใช่ นั่นก็คือเปลี่ยนมาใช้หมายเลขบัตรประชาชนนี่แหละเป็น Primary Key ผมเชื่อว่าประวัติศาสตร์ต้องซ้ำรอยอีกครั้งแน่นอน</p><p id="7371">สมมติว่าประเทศอื่นมีการใช้ pattern หมายเลขบัตรประชาชนแบบเดียวกับเรา ถ้าวันหนึ่งรัฐบาลบอกว่าจะใช้ระบบนี้เก็บข้อมูลนักท่องเที่ยวต่างชาติด้วย รับรองนักท่องเที่ยวเข้าประเทศเราไม่ได้แน่ๆ เพราะหมายเลขบัตรประชาชนซ้ำกัน ระบบพังอีกครั้ง</p><p id="fc79">ทีนี้ทำอย่างไรดี? ตำตอบก็คือ ใช้ Primary Key เป็น running number ครับ บาง Database จะมีระบบ auto-increment ทำให้เราจะได้ความสามารถนี้มาโดยอัตโนมัติ</p><p id="9451">หรือบางครั้งถ้าเราไม่อยากพึ่ง Database มาก เราอาจจะใช้ UUID มาแทน Primary Key ที่เป็น auto-increment</p><p id="0938">จากนั้นในช่วงแรก เราสามารถตั้งชื่อและนามสกุลให้เป็น Unique Key ไว้ก่อน หากเจอปัญหาว่าชื่อและนามสกุลมันไม่ unique อีกต่อไปก็เพียงลบ Unique Key ออกไปและใส่ Unique Key ให้ column ใหม่ที่ต้องการนั่นเอง</p><p id="8c43">ดังนั้นเมื่อใดก็ตามที่เราจะตั้ง column ที่ใช้เก็บข้อมูลเป็น Primary Key ก็ขอให้นึกถึงบทความนี้เข้าไว้นะครับ</p><p id="91b1">บทความนี้ค่อนข้างจะเป็นความคิดเห็นเสียมากกว่า ไม่ถึงขั้นบังคับว่าต้องทำแบบนี้เท่านั้น ศึกษาไว้เป็นแนวคิดเพื่อที่เราจะได้หยิบมาใช้เมื่อถึงเวลาอันควร</p></article></body>

วิธีเลือก 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 ก็ขอให้นึกถึงบทความนี้เข้าไว้นะครับ

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

Recommended from ReadMedium