คำถามเก่าแก่เรื่องการตั้งชื่อตารางฐานข้อมูลว่าควรใช้เอกพจน์หรือพหูพจน์ได้จุดประกายการถกเถียงใหม่ในชุมชนนักพัฒนา แม้ว่าอาจดูเป็นรายละเอียดเล็กน้อย แต่การเลือกใช้หลักการตั้งชื่อนี้สามารถส่งผลกระทบอย่างกว้างขวางต่อความสอดคล้องของโค้ด ความสามารถในการอ่าน และการบำรุงรักษาในระยะยาว
การอภิปรายนี้มุ่งเน้นไปที่การตัดสินใจพื้นฐานที่นักออกแบบฐานข้อมูลทุกคนต้องเผชิญ: ตารางที่เก็บข้อมูลผู้ใช้ควรเรียกว่า user หรือ users? การเลือกที่ดูเรียบง่ายนี้ได้แบ่งแยกนักพัฒนามาหลายปี โดยมีการโต้แย้งอย่างหลงใหลจากทั้งสองฝ่าย
ความท้าทายเรื่องความสอดคล้อง
ข้อโต้แย้งที่แข็งแกร่งที่สุดที่เกิดขึ้นจากการอภิปรายในชุมชนมุ่งเน้นไปที่ความสอดคล้องมากกว่าความถูกต้อง นักพัฒนาหลายคนเน้นย้ำว่าการรักษาแนวทางที่เป็นเอกภาพตลอดทั้งโครงการมีความสำคัญมากกว่าการเลือกใช้หลักการเฉพาะใด ความท้าทายจะปรากฏชัดเมื่อต้องจัดการกับกรณีพิเศษ - คำที่เป็นพหูพจน์อยู่แล้ว ชื่อที่ประกอบ หรือคำศัพท์ที่ไม่เป็นไปตามกฎการทำพหูพจน์มาตรฐานของภาษาอังกฤษ
ปัญหาที่ยุ่งยากเป็นพิเศษเกี่ยวข้องกับเครื่องมือ Object-Relational Mapping (ORM) ที่แปลงระหว่างรูปแบบเอกพจน์และพหูพจน์โดยอัตโนมัติ เครื่องมือเหล่านี้บางครั้งสร้างผลลัพธ์ที่แปลกประหลาด เช่น addresss หรือแปลง customer_data เป็น customer_datum ในโค้ด ทำให้เกิดความสับสนสำหรับนักพัฒนาที่พยายามค้นหาและเข้าใจ codebase
ปัญหาทางเทคนิคทั่วไป
ปัญหา | ผลกระทบแบบเอกพจน์ | ผลกระทบแบบพหูพจน์ |
---|---|---|
คำสงวน | "user", "transaction" ต้องใส่เครื่องหมายคำพูด | โอกาสขัดแย้งน้อยกว่า |
การแปลงอัตโนมัติของ ORM | แมปตรงไปยังชื่อคลาส | อาจสร้าง "addresss", "datum" |
การตั้งชื่อตาราง join | สะอาด: "user_role" | ยุ่งยาก: "users_roles" หรือ "user_roles" |
การ query แบบอ้างอิงตัวเอง | ต้องการ aliasing ตามธรรมชาติ | การจัดการ alias ซับซ้อนกว่า |
ความซับซ้อนทางเทคนิค
นอกเหนือจากความสวยงามของการตั้งชื่อแล้ว ปัญหาทางเทคนิคในทางปฏิบัติยังทำให้การตัดสินใจซับซ้อนขึ้น ระบบฐานข้อมูลมักจะสงวนคำภาษาอังกฤษทั่วไปไว้เป็นคีย์เวิร์ด ทำให้ชื่อเอกพจน์ เช่น user หรือ transaction เป็นปัญหาในฐานข้อมูลบางตัว สิ่งนี้บังคับให้นักพัฒนาต้องใช้เครื่องหมายคำพูดรอบชื่อตาราง ทำให้เกิด syntax ที่ไม่สอดคล้องกันตลอดทั้ง query
ความซับซ้อนเพิ่มขึ้นเป็นทวีคูณเมื่อต้องจัดการกับตาราง join และความสัมพันธ์ที่อ้างอิงตัวเอง ชื่อตารางพหูพจน์สามารถนำไปสู่การสร้างที่แปลกประหลาด เช่น customers_labels ที่การวางตำแหน่งของ s กลายเป็นสิ่งที่ไม่ชัดเจนและยากต่อการคาดเดาสำหรับสมาชิกทีมใหม่
ข้อโต้แย้งสำหรับชื่อตารางเอกพจน์
- การใช้เหตุผลเชิงความสัมพันธ์: ตารางแสดงถึงความสัมพันธ์ระหว่างคุณสมบัติของข้อมูล ไม่ใช่การรวบรวมข้อมูล
- ความสามารถในการอ่าน SQL ที่ดีขึ้น: หลีกเลี่ยงโครงสร้างที่แปลกๆ เช่น "users.country_id" ในประโยค JOIN
- ความเข้ากันได้กับ ORM: ตรงกับชื่อคลาสเอกพจน์ (คลาส User → ตาราง user)
- การจัดการกรณีพิเศษ: หลีกเลี่ยงปัญหาการทำให้เป็นพหูพจน์กับคำเช่น "UserFacts" หรือ "data"
- ความขัดแย้งกับคำสงวน: ลดความขัดแย้งกับคำสงวนของฐานข้อมูล
ผลกระทบในโลกแห่งความเป็นจริง
แม้ว่าบางคนจะมองว่านี่เป็นเพียง bikeshedding - การโต้เถียงเรื่องรายละเอียดเล็กน้อย - ชุมชนเผยให้เห็นผลกระทบต่อประสิทธิภาพการทำงานอย่างแท้จริง นักพัฒนารายงานว่าใช้เวลาในการแก้ไขปัญหาที่เกิดจากหลักการตั้งชื่อที่ผสมปนเป กิน ดิ้นรนในการค้นหาออบเจ็กต์ใน codebase ที่เครื่องมือ ORM สร้างรูปแบบเอกพจน์ที่ไม่คาดคิด และจัดการกับภาระทางปัญญาในการสลับระหว่างรูปแบบการตั้งชื่อที่แตกต่างกันภายในโครงการเดียวกัน
การถกเถียงนี้ยังเน้นให้เห็นว่าผู้จำหน่ายฐานข้อมูลต่างๆ ใช้แนวทางที่แตกต่างกันในตารางระบบของตัวเอง โดย PostgreSQL ใช้ชื่อเอกพจน์ เช่น pg_class ในขณะที่ Oracle เลือกใช้รูปแบบพหูพจน์ เช่น ALL_TABLES
ข้อโต้แย้งสำหรับชื่อตารางแบบพหูพจน์
- ตรรกะที่เข้าใจง่าย: ตารางเก็บข้อมูลหลายเรคคอร์ด ดังนั้นชื่อแบบพหูพจน์จึงรู้สึกเป็นธรรมชาติ
- ความอ่านง่ายของ FROM clause: "SELECT * FROM users" อ่านแล้วเป็นธรรมชาติมากกว่า
- การแสดงถึงคอลเลกชัน: ตารางในแนวคิดแสดงถึงคอลเลกชันของเอนทิตี้
- การยอมรับในอุตสาหกรรม: เฟรมเวิร์กยอดนิยมหลายตัว (เช่น Rails ) ใช้การตั้งชื่อแบบพหูพจน์เป็นค่าเริ่มต้น
การหาจุดร่วม
แม้จะมีการถกเถียงอย่างดุเดือด นักพัฒนาส่วนใหญ่เห็นพ้องต้องกันในหลักการสำคัญข้อหนึ่ง: เลือกหลักการแล้วยึดมั่นอย่างเคร่งครัด ความเจ็บปวดไม่ได้มาจากการเลือกแนวทางที่ผิด แต่มาจากการใช้แนวทางใดก็ตามที่คุณเลือกอย่างไม่สอดคล้องกัน
ความสอดคล้องแต่ผิดดีกว่าความไม่สอดคล้องแต่ถูก
ชุมชนแนะนำว่าทีมควรกำหนดหลักการตั้งชื่อที่ชัดเจนตั้งแต่เริ่มต้นโครงการ จัดทำเอกสารการจัดการกรณีพิเศษ และให้แน่ใจว่าสมาชิกทีมทุกคนเข้าใจแนวทางที่เลือกไว้ ไม่ว่าคุณจะโน้มเอียงไปทางความแม่นยำทางคณิตศาสตร์ของชื่อความสัมพันธ์เอกพจน์หรือความน่าสนใจที่เข้าใจง่ายของคอลเลกชันพหูพจน์ ความสอดคล้องยังคงเป็นเป้าหมายสูงสุดสำหรับการออกแบบฐานข้อมูลที่บำรุงรักษาได้