แบบแผนการตั้งชื่อชื่อคอลัมน์และแนวปฏิบัติที่เหมาะสมที่สุด


19

ฉันต้องการความคิดเห็นของผู้เชี่ยวชาญบางประการเกี่ยวกับการปฏิบัติที่ดีที่สุดเมื่อมันมาถึงการตั้งชื่อคอลัมน์

พื้นหลังเป็นไปตาม Wikipedia , ไวยากรณ์ต่อไปนี้

SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);

มีประสิทธิภาพมากกว่า

SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);

อย่างไรก็ตามJOIN ... USINGไวยากรณ์ทำงานเฉพาะของคอลัมน์ที่สำคัญทั้งหมดหลักมีชื่อซ้ำกันทั่วโลก ดังนั้นฉันสงสัยว่านี่เป็นสิ่งที่ถูกต้องที่จะทำ

ส่วนตัวผมมักจะใช้ในการสร้างตารางที่มีคอลัมน์ PK และคอลัมน์ที่สำคัญต่างประเทศid othertable_idแต่วิธีการมันเป็นไปไม่ได้ที่จะใช้หรือUSINGNATURAL JOIN

การเชื่อมโยงใด ๆ กับสไตล์การออกแบบหรือแนวทางปฏิบัติที่ดีที่สุดสำหรับการออกแบบตารางจะได้รับการชื่นชมเช่นกัน!


3
Wikipedia นั้นผิด รุ่นแรกไม่ได้มีประสิทธิภาพมากไปกว่ารุ่นที่สอง ภายใต้ประทุนฐานข้อมูลจะสร้างข้อความค้นหาที่เหมือนกันทั้งหมด
a_horse_with_no_name

คำตอบ:


13

สิ่งนี้ถูกถามมาก่อนในเรื่อง SO

ตำแหน่งที่คุณมีชื่อสามัญและชื่อที่ไม่ชัดเจนมากให้นำหน้าชื่อตาราง นั่นคือสิ่งที่คุณต้องรับผิดชอบในการเป็นนามแฝงในเกือบทุกข้อความค้นหา

ดังนั้นสำหรับตารางพนักงานฉันมี

EmployeeID
EmployeeName
Comment
Salary
StartDate
EndDate
InsertedDateTime
...

และ Wikipedia พูดว่า:

การสร้างโดยใช้นั้นเป็นเพียงน้ำตาลซินแทคติคเพียงอย่างเดียวเนื่องจากชุดผลลัพธ์แตกต่างจากชุดผลลัพธ์ของเวอร์ชันด้วยภาคแสดงที่ชัดเจน โดยเฉพาะคอลัมน์ใด ๆ ที่กล่าวถึงในรายการการใช้จะปรากฏเพียงครั้งเดียวด้วยชื่อที่ไม่มีเงื่อนไขแทนที่จะเป็นหนึ่งครั้งสำหรับแต่ละตารางในการเข้าร่วม

นั่นคือหนึ่งคอลัมน์ที่น้อยกว่า คุณไม่เคยใช้SELECT *อยู่ดีดังนั้นประเด็นก็คือการสงสัย ...


ฉันไม่ได้คิดถึงการค้นหา SO - คุณมีลิงก์ไปยังคำถาม SO ที่ดีเป็นพิเศษหรือไม่ อย่างไรก็ตามขอบคุณฉันจะยึดติดกับ "ID ที่ไม่ซ้ำกัน" การตั้งชื่อต่อจากนี้ไป!
Kerrek SB

@Kerrk SB: อันที่จริงฉันยังไม่ได้ ฉันมักจะไม่สนใจพวกเขาเพราะแต่ละคนจะได้รับคำตอบหรือปิดอย่างรวดเร็ว :-) ขอโทษด้วย
. บ

ฉันต้องการที่จะเห็นคำถามที่คล้ายกันใน SO หากใครสามารถขุดลิงค์ ฉันมาที่นี่เพราะฉันไม่พบคำถามที่นั่นและฉันแน่ใจว่ามันถูกถามแล้ว ฉันพบคำถามนี้ทันที
Nicholas Shanks

มันอยู่ที่โปรแกรมเมอร์ ขนมปังก้อนใหญ่ที่ดีสำหรับคุณ ... programmers.stackexchange.com/questions/114728/…
gbn

6

หนังสือต่อไปนี้พูดถึงเกี่ยวกับการใช้ ID เป็น SQL antipattern และฉัน gree กับผู้เขียนว่ามันเป็น http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1

นี่เป็นปัญหาเฉพาะเมื่อคุณทำการรายงานที่ซับซ้อนและต้องการมากกว่าหนึ่ง id เนื่องจากคุณต้องใช้นามแฝง การใช้ tablename ID ยังช่วยให้ระบุ FK ที่ถูกต้องเพื่อเข้าร่วมได้ง่ายขึ้น (เนื่องจากมีชื่อเหมือนกัน) และทำให้เกิดข้อผิดพลาดจากการเข้าร่วมกับสิ่งที่ไม่ถูกต้อง

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


4

เป็นการดีกว่าที่จะให้ชื่อตารางและชื่อคอลัมน์เช่น Employee.EmployeeID อย่างชัดเจนพร้อมกับนิพจน์ที่มีการเข้าร่วมอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.