ไม่มีใครใช้ Foreign Key กันแล้ว

Artiya
1 min readNov 9, 2019

--

ใครที่เคยเรียนระบบฐานข้อมูลกันมาคงเคยได้ยินผ่านหูกันมาว่าการใช้ Foreign Key เชื่อมความสัมพันธ์ระหว่างตารางนั้นจะช่วยให้ข้อมูลมีความถูกต้องสมบูรณ์อยู่เสมอ แต่จนแล้วจนรอดในชีวิตการทำงานของผมมาแปดปี ทำเกี่ยวกับฐานข้อมูลมาก็เยอะก็ยังไม่ได้มีโอกาสใช้ Foreign Key ที่อุตส่าห์ล่ำเรียนมาเลย พอมีคนพูดถึงเรื่องนี้ในระบบย้ายฐานข้อมูลของ Github เอง ย้ำของ Github ไม่ใช่โปรเจคไก่กาบน Github เลยเอามาแชร์ให้ทุกคนคิดต่อกันดังนี้

  • FK ทำให้ฐานข้อมูลนั้นแบ่งแยกกัน แอพที่ใช้ FK เป็นประจำเพื่อรักษาความสมบูรณ์แทนที่จะทำด้วยตัวเอง อาจจะใช้ on cascade delete ทำให้เมื่อต้องแบ่งแยกข้อมูลบางส่วนออกไป จะต้องทำการทดสอบแอพใหม่หมดโดยไม่รู้ว่าจะเจอพฤติกรรมแปลกๆ อะไรหรือเปล่า
  • FK ส่งผลต่อประสิทธิภาพฐานข้อมูลมาก ถ้าแค่ทำอินเด็กซ์ยังพอไหว แต่ถ้าจะต้องไปไล่ตามเพิ่มลบที่อื่นด้วยก็ยากกว่า
  • FK นั้นทำไม่ได้เลยถ้าจะมีการปรับโครงสร้างฐานข้อมูลแบบออนไลน์ที่ฐานข้อมูลยังมีการใช้งานอยู่

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

การค้นหา Foreign Key ใน Google ก็ลดลงเรื่อยๆ จริงๆ

ที่มา
https://github.com/github/gh-ost/issues/331

--

--

Artiya
Artiya

No responses yet