ในกรณีของ Oracle คุณจะไม่ต้องการตั้งชื่อคอลัมน์ 'id' หรือ 'name' หรือชื่อทั่วไป
ปัญหาคือโดยค่าเริ่มต้นในเวอร์ชันเก่า Oracle จะพยายามเข้าร่วมตารางตามชื่อคอลัมน์ที่คล้ายกันดังนั้นหากฉันตั้งชื่อทุกอย่างดีแล้วฉันก็จบลงด้วยการระบุส่วนร่วมเริ่มต้นระหว่างตารางของฉัน
แต่แม้ว่าคุณจะไม่ได้ใช้ Oracle โดยไม่ต้องเลือกชื่อที่ปรากฏในหลาย ๆ ตารางก็หมายความว่าคุณไม่จำเป็นต้องเจอปัญหาเรื่องนามแฝงทุกครั้งที่คุณเลือกตัวเลือกในสองตาราง:
SELECT
instrument.name as instrument_name,
instrument.abbr as instrument_abbr,
source.name as source_name,
source.abbr as source_abbr,
...
FROM ...
ดังนั้นหากการเลือกหลายตารางเป็นบรรทัดฐานชื่อคอลัมน์ที่ยาวขึ้นจะช่วยให้คุณพิมพ์ได้ (ถ้าคุณใช้เพียงหนึ่งตารางต่อครั้ง ... คุณต้องการฐานข้อมูลเชิงสัมพันธ์หรือไม่?)
... และการบันทึกการพิมพ์นำเราไปสู่ปัญหาอื่นใน Oracle - อย่างน้อยใน 8i (เวอร์ชันปัจจุบันเมื่อฉันใช้หลักสูตร Oracle SQL Tuning and Data Modeling) การแคชแผนการดำเนินการขึ้นอยู่กับอักขระตัวแรกเท่านั้น ข้อความค้นหา (จำค่าที่แน่นอนไม่ได้ ... 1024?) ดังนั้นหากคุณมีข้อความค้นหาที่แตกต่างกันไปตามสิ่งที่เกิดขึ้นในตอนท้ายของส่วนคำสั่งที่ไหนและรายการคอลัมน์ที่ยาวมาก ๆ ที่คุณแยกออกมา สามารถทำงานได้อย่างมีประสิทธิภาพเนื่องจากไม่สามารถแคชแผนการดำเนินการได้อย่างถูกต้อง
Oracle มีคำแนะนำในการเลือกสิ่งที่พวกเขาอ้างว่าเป็นชื่อตารางและคอลัมน์ที่ดีซึ่งโดยทั่วไปแล้วเป็นแนวทางสำหรับการลบตัวอักษรจนถึงประมาณ 5-8 ตัวอักษร แต่ฉันไม่เคยสนใจมันมากนัก
...
เป็นสิ่งที่นอกเหนือไปจากที่:
- คอลัมน์เป็นเอกพจน์เสมอ (ตารางเป็นพหูพจน์เสมอ)
- ชื่อทั้งหมดเป็นตัวพิมพ์เล็กในกรณีที่มีบางสิ่งบางอย่าง
- จากผลข้างต้นให้ใช้เครื่องหมายขีดล่างแทนตัวอูฐ
อัปเดต : สำหรับผู้ที่ไม่คุ้นเคยกับพฤติกรรมการเข้าร่วมของ Oracle ดูตัวอย่างล่าสุดเกี่ยวกับการจัดทำ Oracle SQL: เข้าร่วมเงื่อนไขที่ระบุ:
เกิดอะไรขึ้น? เหตุผลอยู่ที่ข้อเท็จจริงที่ว่านอกเหนือจาก supplier_id ตารางทั้งสองนี้ยังมีคอลัมน์อีกคู่หนึ่งที่มีชื่อทั่วไป คอลัมน์นั้นคือชื่อ ดังนั้นเมื่อคุณขอเข้าร่วมแบบธรรมชาติระหว่างผู้จัดหาและตารางส่วนการเข้าร่วมจะเกิดขึ้นไม่เพียง แต่โดยการทำให้คอลัมน์ supplier_id ของทั้งสองตารางเท่ากัน แต่คอลัมน์ชื่อจากสองตารางนั้นได้รับการบรรจุด้วยเช่นกัน เนื่องจากไม่มีชื่อซัพพลายเออร์เหมือนกับชื่อชิ้นส่วนจากซัพพลายเออร์รายเดียวกันจึงไม่มีการส่งคืนแถวโดยการสืบค้น
ภายใต้ 'ไวยากรณ์การเข้าร่วมเก่า' (8i และก่อนหน้านี้) 'NATURAL JOIN' เป็นพฤติกรรมการเข้าร่วมเริ่มต้นและฉันเชื่อว่ายังคงเป็นเช่นนั้นหากคุณไม่ได้ระบุเงื่อนไขการเข้าร่วม เมื่อ 'NATURAL JOIN' เป็นตัวเลือกอย่างเป็นทางการใน 9i คำแนะนำทั่วไปไม่ได้ใช้เพราะการตั้งชื่อคอลัมน์ที่ไม่ดีสามารถทำให้คุณตะลึงซึ่งฉันกำลังสนับสนุนชื่อคอลัมน์ที่ดี