Katakanlah saya memiliki dua tabel:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
Apa yang harus saya sebut tabel yang memetakan warna ke bentuk?
Table: ???
Columns: ColorId, ShapeId
Katakanlah saya memiliki dua tabel:
Table: Color
Columns: Id, ColorName, ColorCode
Table: Shape
Columns: Id, ShapeName, VertexList
Apa yang harus saya sebut tabel yang memetakan warna ke bentuk?
Table: ???
Columns: ColorId, ShapeId
Shape2Color
, ShapeXColor
, ShapeColorLink
.
Jawaban:
Hanya ada dua hal sulit dalam Ilmu Komputer: pembatalan cache dan penamaan hal
- Phil Karlton
Memberikan nama yang baik untuk tabel yang mewakili many-to-many
hubungan membuat hubungan lebih mudah dibaca dan dipahami. Terkadang menemukan nama yang bagus bukanlah hal yang sepele, tetapi biasanya ada baiknya meluangkan waktu untuk memikirkannya.
Contoh: Reader
dan Newspaper
.
A Newspaper
memiliki banyak Readers
dan a Reader
memiliki banyakNewspapers
Anda dapat menyebut hubungan tersebut NewspaperReader
tetapi nama seperti itu Subscription
mungkin menyampaikan lebih baik tentang tabel tersebut.
Namanya Subscription
juga lebih idiomatis jika Anda ingin memetakan tabel ke objek nanti.
Konvensi penamaan many-to-many
tabel merupakan rangkaian dari nama kedua tabel yang terlibat dalam relasi. ColourShape
akan menjadi default yang masuk akal dalam kasus Anda. Yang mengatakan, saya pikir Nick D datang dengan dua saran bagus: Style
dan Texture
.
Bagaimana dengan ColorShapeMap atau Style atau Texture .
Menarik sekitar setengah dari jawaban memberikan istilah umum untuk setiap tabel yang menerapkan hubungan banyak-ke-banyak, dan separuh jawaban lainnya menyarankan nama untuk tabel khusus ini.
Saya menyebut tabel ini tabel persimpangan umumnya.
Dalam hal konvensi penamaan, kebanyakan orang memberi nama yang merupakan campuran dari dua tabel dalam hubungan banyak-ke-banyak. Jadi dalam kasus ini, " ColorShape
" atau " ShapeColor
." Tapi menurutku ini terlihat artifisial dan canggung.
Joe Celko merekomendasikan dalam bukunya "SQL Programming Style" untuk menamai tabel-tabel ini dengan cara bahasa yang alami. Misalnya, jika Bentuk diwarnai dengan Warna, maka beri nama tabel ColoredBy
. Kemudian Anda bisa memiliki diagram yang kurang lebih terbaca secara alami seperti ini:
Shape <-- ColoredBy --> Color
Sebaliknya, Anda bisa mengatakan Warna mewarnai Bentuk:
Color <-- Colors --> Shape
Tapi ini terlihat seperti tabel tengah yang sama Color
dengan konvensi penamaan jamak. Terlalu membingungkan.
Mungkin paling jelas menggunakan ColoredBy
konvensi penamaan. Menariknya, penggunaan passive voice membuat konvensi penamaan lebih jelas.
HasColor
bisa menjadi nama lain yang mungkin untuk tabel interseksi yang menggunakan bahasa alami.
hasColour
/ ColouredBy
untuk apa? Ini mengalahkan tujuan penamaan yang harus digunakan DESCRIBE
untuk mengetahui hubungan.
ShapeHasColor
dan TextHasColor
?
Beri nama tabel sesuka Anda, asalkan informatif:
COLOR_SHAPE_XREF
Dari perspektif model, tabel ini disebut tabel referensi gabungan / korrollary / silang. Saya telah mempertahankan kebiasaan menggunakan _XREF
di bagian akhir untuk membuat hubungan menjadi jelas.
Ini adalah Entitas Asosiasi dan sering kali cukup signifikan.
Misalnya, hubungan banyak ke banyak antara KERETA API dan TIMES menimbulkan JADWAL.
Jika tidak ada entitas baru yang jelas (seperti jadwal) maka konvensi adalah menjalankan dua kata bersama-sama, memberikan COLOUR_SHAPE atau serupa.
Tabel pemetaan inilah yang biasanya disebut.
ColorToShape
ColorToShapeMap
To
nama. Bagaimana jika Anda memiliki Shape dengan HighlightColor. Jika Anda menyebutnya ShapeHighlightColor
, itu agak ambigu apakah itu ShapeHighlight yang dipetakan ke warna atau Bentuk yang dipetakan ke Warna Sorotan. Jadi, ShapeToHighlightColor
mungkin lebih jelas.
Saya telah bekerja dengan DBA yang menyebutnya tabel gabungan .
Colour_Shape cukup umum - kecuali hubungan tersebut memiliki nama khusus domain yang eksplisit.
Colour_Shape_Colour
dan Colour_Shape_Shape
.
Saya merekomendasikan menggunakan kombinasi nama entitas dan menempatkannya dalam bentuk jamak. Dengan demikian nama tabel akan menyatakan koneksi "banyak-ke-banyak".
Dalam kasus Anda:
Warna + Bentuk = Bentuk Warna
Saya biasanya mendengar yang disebut Meja Persimpangan. Saya memberi nama tabel berdasarkan apa yang digabungkannya, jadi dalam kasus Anda adalah ColorShape, atau ShapeColor. Saya pikir lebih masuk akal untuk Bentuk memiliki warna daripada Warna memiliki bentuk, jadi saya akan menggunakan ShapeColor
.
ATAU Bridge Table
ATAU Join Table
ATAU Map Table
ATAU Link Table
ATAU Cross-Reference Table
Ini mulai digunakan saat kita mencari hubungan banyak-ke-banyak di mana kunci dari kedua tabel membentuk kunci primer komposit dari tabel persimpangan.
Saya juga pernah mendengar istilah tabel asosiatif digunakan.
nama untuk tabel Anda mungkin ColorShapeAssociations
berarti bahwa setiap baris mewakili hubungan antara warna dan bentuk itu. Adanya baris menyiratkan bahwa warna datang dalam bentuk itu, dan bahwa bentuk itu datang dalam warna itu. Semua baris dengan warna tertentu akan menjadi himpunan semua bentuk yang terkait dengan warna, dan baris untuk bentuk tertentu akan menjadi himpunan semua warna yang bentuknya masuk ...
Secara umum sebagian besar database memiliki semacam konvensi penamaan untuk indeks, kunci primer, dan sebagainya. Di PostgreSQL, penamaan berikut telah disarankan:
Tabel Anda adalah tabel yang ditautkan ke saya. Agar tetap sejalan dengan penamaan di atas, saya akan memilih yang berikut:
Dalam daftar objek tabel, tabel terkait akan berada setelah tablename1. Ini mungkin lebih menarik secara visual. Tetapi Anda juga dapat memilih nama yang menjelaskan tujuan tautan seperti yang disarankan orang lain. Ini mungkin membantu untuk menjaga nama kolom id tetap pendek (jika tautan Anda harus memiliki nama id sendiri dan direferensikan di tabel lain).
Sulit untuk menjawab sesuatu yang sewenang-wenang seperti ini, tetapi saya cenderung lebih suka ide tosh untuk menamainya setelah sesuatu di domain sebenarnya daripada beberapa deskripsi umum tentang hubungan yang mendasarinya.
Seringkali tabel semacam ini akan berkembang menjadi sesuatu yang lebih kaya untuk model domain dan akan mengambil atribut tambahan di atas dan di luar kunci asing yang ditautkan.
Misalnya, bagaimana jika Anda perlu menyimpan tekstur selain warna? Mungkin tampak agak funky untuk memperluas tabel SHAPE_COLOR untuk menahan teksturnya.
Di sisi lain, ada juga sesuatu yang bisa dikatakan untuk membuat keputusan yang tepat berdasarkan persyaratan apa yang Anda miliki saat ini dan bersiap untuk melakukan refactor ketika persyaratan tambahan diperkenalkan nanti.
Semua yang dikatakan, saya akan menyebutnya PERMUKAAN jika saya memiliki wawasan bahwa akan ada properti seperti permukaan tambahan yang diperkenalkan nanti. Jika tidak, saya tidak akan kesulitan menyebutnya SHAPE_COLOR atau semacamnya dan beralih ke masalah desain yang lebih mendesak.
Saya akan menggunakan r_shape_colors
atau r_shape_color
bergantung pada artinya.
r_
akan menjadi pengganti xref_
dalam kasus ini.
Pilihan saya adalah untuk nama yang paling menggambarkan tabel. Dalam hal ini mungkin saja ShapeColor
tetapi dalam banyak kasus nama yang berbeda dari penggabungan lebih baik. Saya suka keterbacaan dan bagi saya , itu berarti tidak ada sufiks, tidak ada garis bawah dan tidak ada awalan.
Saya pribadi akan memilih Colour_Shape, dengan garis bawah: hanya karena saya telah melihat konvensi ini muncul cukup banyak. [tapi setuju dengan posting lain di sini bahwa mungkin ada cara yang lebih 'puitis' untuk melakukan ini].
Ingatlah bahwa kunci asing juga harus dibangun di tabel gabungan ini yang akan mereferensikan tabel Warna & Bentuk yang juga akan membantu mengidentifikasi hubungan.
Sebuah konvensi yang saya lihat banyak untuk menggabungkan tabel yang secara pribadi saya sukai adalah 'Colour_v_Shape', yang saya dengar orang menyebut bahasa sehari-hari sebagai 'versus tabel'.
Sekilas terlihat sangat jelas bahwa tabel mewakili hubungan banyak-ke-banyak, dan membantu menghindari situasi membingungkan (meskipun jarang) saat Anda mencoba menggabungkan dua kata yang mungkin membentuk kata majemuk, misalnya 'Mentega' dan 'Milk' bisa menjadi 'ButterMilk', tapi bagaimana jika Anda juga perlu merepresentasikan entitas yang disebut 'Buttermilk'?
Dengan cara ini, Anda akan mendapatkan 'Butter_v_Milk' dan 'Buttermilk' - tidak ada kebingungan.
Juga, saya suka berpikir ada referensi Foo Fighters di pertanyaan aslinya.