Konvensi penamaan PostgreSQL

193

Di mana saya dapat menemukan manual terperinci tentang konvensi penamaan PostgreSQL? (nama tabel vs. peti unta, urutan, kunci primer, batasan, indeks, dll ...)

boj
sumber
Nah, jika kita akan melangkah lebih jauh dan melihat ke dalam penamaan yang umum, saya sangat merekomendasikan untuk memeriksa jawaban ini: stackoverflow.com/questions/4702728/…
vyegorov

Jawaban:

254

Mengenai nama tabel, kasus, dll, konvensi yang lazim adalah:

  • Kata kunci SQL: UPPER CASE
  • nama (pengidentifikasi): lower_case_with_underscores

Sebagai contoh :

UPDATE my_table SET name = 5;

Ini tidak ditulis dalam batu, tetapi sedikit tentang pengidentifikasi dalam huruf kecil sangat dianjurkan, IMO. Postgresql memperlakukan case identifiers dengan tidak sensitif ketika tidak dikutip (sebenarnya melipatnya menjadi huruf kecil secara internal), dan case sensitif ketika dikutip; banyak orang tidak menyadari keanehan ini. Menggunakan selalu huruf kecil Anda aman. Bagaimanapun, itu dapat diterima untuk menggunakan camelCaseatau PascalCase(atau UPPER_CASE), selama Anda konsisten: baik pengidentifikasi kutipan selalu atau tidak pernah (dan ini termasuk pembuatan skema!).

Saya tidak mengetahui banyak konvensi atau panduan gaya lainnya. Kunci pengganti biasanya dibuat dari urutan (biasanya dengan serialmakro), akan lebih mudah untuk tetap menggunakan penamaan itu untuk urutan tersebut jika Anda membuatnya dengan tangan ( tablename_colname_seq).

Lihat juga beberapa diskusi di sini , di sini dan (untuk SQL umum) di sini , semua dengan beberapa tautan terkait.

Catatan: Postgresql 10 memperkenalkan identity kolom sebagai pengganti SQL untuk serial .

leonbloy
sumber
3
FWIW, satu-satunya keistimewaan adalah bahwa Pg melipat ke huruf kecil, di mana standar SQL mengatakan bahwa ia harus dilipat ke huruf besar. DBMS yang gagal untuk melipat huruf adalah yang tidak standar aneh.
Craig Ringer
6
Sebagai pengguna baru Postgres, ini cukup membuat frustrasi. Harus memilih antara mengetik kutipan setiap saat atau menggunakan konvensi penamaan yang jelek menyebalkan. Ini menyebalkan.
d512
1
@ user1334007 Konvensi ini tidak jelek - dan baca komentar Craig di atas. Dan tidak perlu mengutip jika Anda tidak mengutip ketika Anda membuat tabel (yaitu, jika Anda konsisten).
leonbloy
4
@leonbloy, jika Anda tidak mengutip ketika Anda membuat tabel, maka Postgres akan menurunkan nama tabel dan nama bidang Anda. Anda dapat menggunakan kasing unta saat menulis kueri, tetapi hasil Anda akan menampilkan semua huruf kecil, yang sulit dibaca ketika bidang terdiri dari beberapa kata (tanggal terakhir diperbarui). Jika Anda ingin nama kolom Anda dapat dibaca dalam hasil kueri, Anda harus mengutip semuanya atau menggunakan case ular, yang, IMO, jelek. Akan jauh lebih baik jika Postgres meninggalkan nama Anda sendiri dan tidak mengharuskan Anda memberikan penawaran.
d512
11
Saya benci kata kunci dalam huruf besar, hanya membencinya, konvensi atau tidak. Tidak ada ketergantungan kasus dalam hal kata kunci. Saya lebih suka semua huruf kecil. Ya, saya tahu itu hanya pilihan, tetapi ini juga hanya komentar. ;-)
Craig
28

Sebenarnya tidak ada manual formal, karena tidak ada gaya atau standar tunggal.

Selama Anda memahami aturan penamaan pengenal Anda dapat menggunakan apa pun yang Anda suka.

Dalam praktiknya, saya merasa lebih mudah digunakan lower_case_underscore_separated_identifierskarena tidak perlu bagi "Double Quote"mereka di mana-mana untuk melindungi kasing, ruang, dll.

Jika Anda ingin memberi nama tabel dan fungsi "@MyAṕṕ! ""betty"" Shard$42"Anda, Anda akan bebas untuk melakukan itu, meskipun akan sulit untuk mengetik di mana-mana.

Hal utama yang harus dipahami adalah:

  • Kecuali dikutip ganda, pengidentifikasi adalah case-dilipat untuk menurunkan kasus, sehingga MyTable, MYTABLEdan mytablesemua hal yang sama, namun "MYTABLE"dan "MyTable"berbeda;

  • Kecuali dikutip ganda:

    Pengidentifikasi SQL dan kata-kata kunci harus dimulai dengan huruf (az, tetapi juga huruf dengan tanda diakritik dan huruf non-Latin) atau garis bawah (_). Karakter berikutnya dalam pengidentifikasi atau kata kunci dapat berupa huruf, garis bawah, digit (0-9), atau tanda dolar ($).

  • Anda harus mengutip kata kunci ganda jika Anda ingin menggunakannya sebagai pengidentifikasi.

Dalam praktiknya saya sangat menyarankan agar Anda tidak menggunakan kata kunci sebagai pengidentifikasi. Setidaknya hindari kata-kata yang dipesan. Hanya karena Anda dapat memberi nama tabel "with"tidak berarti Anda harus.

Craig Ringer
sumber
1
Terima kasih telah menautkan ke dokumen tentang aturan pemberian nama pengenal . Saya kesulitan menemukan topik khusus itu.
Basil Bourque
1
"Saya merasa lebih mudah untuk menggunakan lower_case_underscore_separated_identifiers" ... baru-baru ini, saya mendengar ini digambarkan sebagai "kasus ular"
bvj