ข้อตกลงการตั้งชื่อ PostgreSQL


193

ฉันจะหาคู่มือโดยละเอียดเกี่ยวกับแบบแผนการตั้งชื่อของ PostgreSQL ได้ที่ไหน (ชื่อตารางเทียบกับกรณีของอูฐลำดับคีย์หลักข้อ จำกัด ดัชนี ฯลฯ ... )


ดีถ้าเราจะไปอีกหน่อยและดูเป็นความ
เชื่อมั่น

คำตอบ:


254

เกี่ยวกับชื่อตารางตัวพิมพ์และอื่น ๆ การประชุมที่แพร่หลายคือ:

  • คำหลัก SQL: UPPER CASE
  • ชื่อ (ตัวระบุ): lower_case_with_underscores

ตัวอย่างเช่น :

UPDATE my_table SET name = 5;

สิ่งนี้ไม่ได้เขียนด้วยหิน แต่แนะนำให้ใช้บิตเกี่ยวกับตัวระบุเป็นตัวพิมพ์เล็ก IMO Postgresql ปฏิบัติต่อตัวระบุกรณีอย่างไม่รู้สึกตัวเมื่อไม่มีการอ้างอิง หลายคนไม่ได้ตระหนักถึงความแปลกประหลาดนี้ การใช้ตัวพิมพ์เล็กเสมอคุณจะปลอดภัย อย่างไรก็ตามเป็นที่ยอมรับที่จะใช้camelCaseหรือPascalCase(หรือUPPER_CASE) ตราบใดที่คุณมีความสอดคล้อง: ตัวระบุคำพูดเสมอหรือไม่เคย (และรวมถึงการสร้างสคีมา!)

ฉันไม่ทราบถึงแนวทางหรือแนวทางเพิ่มเติมอีกมากมาย โดยปกติแล้วปุ่มตัวแทนจะทำจากลำดับ (โดยปกติจะมีserialมาโคร) จะสะดวกในการติดตั้งชื่อนั้นสำหรับลำดับเหล่านั้นหากคุณสร้างด้วยมือ ( tablename_colname_seq)

ดูเพิ่มเติมอภิปรายที่นี่ , ที่นี่และ (สำหรับ SQL ทั่วไป) ที่นี่ทั้งหมดที่มีการเชื่อมโยงที่เกี่ยวข้องหลาย

หมายเหตุ: PostgreSQL 10 แนะนำidentity คอลัมน์เป็นทดแทนที่สอดคล้องกับ SQL สำหรับอนุกรม


3
FWIW สิ่งที่แปลกประหลาดเพียงอย่างเดียวก็คือ Pg จะพับเป็นตัวพิมพ์เล็กซึ่งมาตรฐาน SQL บอกว่าควรพับให้เป็นตัวพิมพ์ใหญ่ DBMSs ที่ล้มเหลวในการพิมพ์ตัวกล่องเป็นตัวที่แปลกที่ไม่เป็นมาตรฐาน
Craig Ringer

6
ในฐานะผู้ใช้ใหม่ของ Postgres สิ่งนี้ค่อนข้างน่าผิดหวัง ต้องเลือกระหว่างการพิมพ์คำพูดตลอดเวลาหรือใช้รูปแบบการตั้งชื่อที่น่าเกลียดครับ มันดูดตูด
d512

1
@ user1334007 การประชุมไม่น่าเกลียด - และอ่านความคิดเห็นของ Craig ข้างต้น และไม่จำเป็นต้องพูดถ้าคุณไม่ได้พูดเมื่อคุณสร้างตาราง (นั่นคือถ้าคุณสอดคล้อง)
leonbloy

4
@leonbloy หากคุณไม่ได้อ้างถึงเมื่อคุณสร้างตาราง Postgres จะลดชื่อตารางและชื่อฟิลด์ของคุณลง คุณสามารถใช้ตัวพิมพ์เล็กอูฐเมื่อคุณเขียนข้อความค้นหา แต่ผลลัพธ์ของคุณจะแสดงเป็นตัวพิมพ์เล็กทั้งหมดซึ่งอ่านได้ยากเมื่อฟิลด์ประกอบด้วยหลายคำ (ล่าสุดคือวันที่อัพเดท) หากคุณต้องการให้ชื่อคอลัมน์ของคุณสามารถอ่านได้ในผลลัพธ์การสืบค้นคุณต้องอ้างทุกอย่างหรือใช้กรณีตัวพิมพ์ซึ่ง IMO นั้นน่าเกลียด มันจะดีกว่านี้ถ้า Postgres ปล่อยชื่อของคุณไว้คนเดียวและไม่ต้องการให้คุณใส่เครื่องหมายคำพูด
d512

11
ฉันเกลียดคำหลักด้วยตัวพิมพ์ใหญ่เพียงแค่เกลียดการประชุมหรือไม่ ไม่มีการขึ้นอยู่กับคำหลัก ฉันชอบตัวพิมพ์เล็กทั้งหมด ใช่ฉันรู้ว่ามันเป็นเพียงการตั้งค่า แต่นี่เป็นเพียงความคิดเห็น ;-)
Craig

28

ไม่มีคู่มืออย่างเป็นทางการจริงๆเพราะไม่มีรูปแบบหรือมาตรฐานเดียว

ตราบใดที่คุณเข้าใจกฎการตั้งชื่อตัวระบุคุณสามารถใช้สิ่งที่คุณต้องการ

ในทางปฏิบัติแล้วฉันพบว่ามันใช้งานง่ายกว่าlower_case_underscore_separated_identifiersเพราะไม่จำเป็นสำหรับ"Double Quote"พวกเขาทุกที่ในการรักษาตัวเรือนพื้นที่

หากคุณต้องการตั้งชื่อตารางและฟังก์ชั่นของ"@MyAṕṕ! ""betty"" Shard$42"คุณคุณมีอิสระที่จะทำเช่นนั้นแม้ว่าจะเป็นเรื่องยากที่จะพิมพ์ทุกที่

สิ่งสำคัญที่ต้องเข้าใจคือ:

  • ยกเว้นกรณีที่ยกมาสองครั้งตัวระบุเป็นกรณีพับได้เพื่อกรณีที่ต่ำกว่าดังนั้นMyTable, MYTABLEและmytableมีทุกสิ่งเดียวกัน แต่"MYTABLE"และ"MyTable"มีความแตกต่างกัน

  • เว้นแต่จะยกมาเป็นสองเท่า:

    ตัวระบุ SQL และคำสำคัญต้องเริ่มต้นด้วยตัวอักษร (az แต่ตัวอักษรที่มีเครื่องหมายกำกับเสียงและตัวอักษรที่ไม่ใช่ละติน) หรือขีดล่าง (_) อักขระที่ตามมาในตัวระบุหรือคำสำคัญอาจเป็นตัวอักษรขีดล่างตัวเลข (0-9) หรือเครื่องหมายดอลลาร์ ($)

  • คุณต้องอ้างคำหลักสองครั้งหากคุณต้องการใช้เป็นตัวระบุ

ในทางปฏิบัติฉันแนะนำอย่างยิ่งว่าคุณไม่ได้ใช้คำหลักเป็นตัวระบุ อย่างน้อยก็ควรหลีกเลี่ยงคำสงวน เพียงเพราะคุณสามารถตั้งชื่อตาราง"with"ไม่ได้หมายความว่าคุณควร


1
ขอบคุณสำหรับการเชื่อมโยงไปยังเอกสารเกี่ยวกับกฎระเบียบของการตั้งชื่อตัวระบุ ฉันมีปัญหาในการค้นหาหัวข้อเฉพาะนั้น
Basil Bourque

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