Apa yang harus saya beri nama tabel yang memetakan dua tabel bersama-sama? [Tutup]

143

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
devuxer
sumber
ColorShape dan ShapeColor alias untuk simetri.
LukLed
2
Saya baru saja menemukan pertanyaan serupa yang tidak saya lihat sebelumnya: stackoverflow.com/questions/1764483/… . Beberapa ide-ide lain dari thread bahwa: Shape2Color, ShapeXColor, ShapeColorLink.
devuxer
1
Jika ada standar penamaan tabel persimpangan - maka ini tidak akan berbasis pilihan. Maka itulah jawaban atas pertanyaan itu. Dengan menutup pertanyaan Anda menutup kemungkinan bagi seseorang seperti saya untuk mengetahui apakah ada cara standar untuk menamai tabel persimpangan Anda atau tidak. Harap pertimbangkan kembali - orang-orang yang menutupnya ...
Lealo

Jawaban:

192

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-manyhubungan 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: Readerdan Newspaper.

A Newspapermemiliki banyak Readersdan a Readermemiliki banyakNewspapers

Anda dapat menyebut hubungan tersebut NewspaperReadertetapi nama seperti itu Subscriptionmungkin menyampaikan lebih baik tentang tabel tersebut.

Namanya Subscriptionjuga lebih idiomatis jika Anda ingin memetakan tabel ke objek nanti.

Konvensi penamaan many-to-manytabel merupakan rangkaian dari nama kedua tabel yang terlibat dalam relasi. ColourShapeakan menjadi default yang masuk akal dalam kasus Anda. Yang mengatakan, saya pikir Nick D datang dengan dua saran bagus: Styledan Texture.

omong kosong
sumber
10
+1: diucapkan dengan baik - nama yang dipilih dengan cermat sekarang akan membuat kemudahan perawatan di masa mendatang.
Preet Sangha
118
"Hanya ada dua hal sulit dalam Ilmu Komputer: pembatalan cache, penamaan, dan kesalahan satu per satu"
Neil McGuigan
1
Katakanlah, jika ada kategori produk dan kategori lain untuk resep. untuk kedua tabel kita akan memiliki resep_kategori dan kategori_kategori, dan karena kita tidak bisa hanya "kategori" nama tabel untuk kedua tabel, untuk mencegah konflik, tabel persimpangan untuk produk dan resep akan menjadi "resep_recipe_categories" dan "produk_produk_kategori"
c9s
4
Informasi menghubungkan secara logis berbicara tidak berarti menambahkan informasi baru. Saya pikir itulah yang terjadi ketika Anda mencoba menemukan kata yang cocok untuk tabel persimpangan. Orang yang membaca koran tidak menjadikan mereka pelanggan, dan tidak ada bentuk tanpa warna. Menggunakan "pelanggan" menambahkan informasi (makna) baru saat menghubungkan pembaca ke surat kabar. Dan tidak ada kata-kata untuk menggambarkan hubungan bentuk dan warna - tidak pernah ada yang sebaliknya, jadi tidak ada nama untuk itu. Ingatlah bahwa tidak ada atribut baru yang diberikan dalam tabel persimpangan.
Lealo
36

Bagaimana dengan ColorShapeMap atau Style atau Texture .

Nick Dandoulakis
sumber
5
1 untuk menghasilkan sesuatu yang lebih elegan daripada hanya menggabungkan nama tabel
tosh
23

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 Colordengan konvensi penamaan jamak. Terlalu membingungkan.

Mungkin paling jelas menggunakan ColoredBykonvensi penamaan. Menariknya, penggunaan passive voice membuat konvensi penamaan lebih jelas.

Bill Karwin
sumber
Bill, terima kasih. Jawaban yang sangat menarik.
devuxer
@Bill: Semua tentang sinonim, dan preferensi sinonim memengaruhi konvensi penamaan.
OMG Ponies
2
Saya kira HasColorbisa menjadi nama lain yang mungkin untuk tabel interseksi yang menggunakan bahasa alami.
Bill Karwin
1
@Bill: Masalah saya dengan konvensi penamaan itu adalah hasColour/ ColouredByuntuk apa? Ini mengalahkan tujuan penamaan yang harus digunakan DESCRIBEuntuk mengetahui hubungan.
OMG Ponies
5
Mirip dengan komentar OMG Ponies, bagaimana jadinya jika benda lain bisa memiliki warna? Jika saya memiliki tabel lain yang memetakan Text to Color, saya memerlukan nama yang unik. Mungkin ShapeHasColordan TextHasColor?
devuxer
21

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 _XREFdi bagian akhir untuk membuat hubungan menjadi jelas.

OMG Ponies
sumber
1
Saya juga menggunakan _XREF ... itu selalu masuk akal bagi saya.
James Cronen
Saya menggali idenya, tetapi sebagai pengguna AutoCAD saya perlu menemukan sufiks yang berbeda dari _XREF ...
Mike
7

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.

Ed Guinness
sumber
6

Tabel pemetaan inilah yang biasanya disebut.

ColorToShape
ColorToShapeMap

sumber
Sebenarnya istilah Mapping umumnya digunakan bila hubungannya searah (satu ke satu atau banyak). Inikah kasusnya? Jika demikian, maka umumnya Anda tidak membutuhkan meja lain. Jika warna selalu menentukan bentuk, maka tambahkan kolom bentuk ke tabel warna, atau sebaliknya. Tabel tambahan biasanya hanya diperlukan jika hubungannya banyak dengan banyak .. Dan dalam hal ini istilah pemetaan tidak sesuai.
Charles Bretana
Dalam hal ini, bentuk apa pun dapat dicocokkan dengan warna apa pun, jadi banyak-ke-banyak.
devuxer
2
BTW, apakah itu tabel pemetaan atau bukan, saya suka ide menggunakan Tonama. 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, ShapeToHighlightColormungkin lebih jelas.
devuxer
FYI: Oracle (bagaimanapun juga, 9i / 10g) memiliki batas 32 karakter untuk nama tabel, jadi Anda tidak bisa terlalu bertele-tele.
OMG Ponies
Saya menggunakan jawaban di atas tetapi dengan cara yang sedikit berbeda. yaitu Color_Shape_Map. Konvensi: Table1_Table2_Map
Goldfish
6

Saya telah bekerja dengan DBA yang menyebutnya tabel gabungan .

Colour_Shape cukup umum - kecuali hubungan tersebut memiliki nama khusus domain yang eksplisit.

Dafydd Rees
sumber
1
Saya tidak suka garis bawah karena bertentangan dengan konvensi penamaan kunci asing sehingga Anda berakhir dengan nama yang tidak menyenangkan seperti Colour_Shape_Colourdan Colour_Shape_Shape.
Dan Bechard
5

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

Palindromer
sumber
Jika Anda menggunakan rute "nama tabel", ini lebih baik karena versi tunggalnya akan "biasanya" berupa tabel dengan spasi nama.
Andrew Haust
4

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.

Bill the Lizard
sumber
4

Junction table

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.

priyanka.sarkar
sumber
3

Tabel Menengah atau Tabel Gabung

Saya akan menamainya "ColorShapes" atau "ColorShape", tergantung pada preferensi Anda

Neil N
sumber
3

Saya juga pernah mendengar istilah tabel asosiatif digunakan.

nama untuk tabel Anda mungkin ColorShapeAssociationsberarti 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 ...

Charles Bretana
sumber
Tapi apa nama tabel sebenarnya?
devuxer
Itu tergantung pada apa yang dijelaskan tabel. Jika tertulis 'apa pun yang oranye harus menjadi belah ketupat', 'apa pun yang ungu harus menjadi lingkaran', dll, maka Anda dapat menyebutnya satu hal (Bentuk_warna, mungkin). Jika definisi lebih longgar - warna yang dikenal untuk bentuk, memungkinkan satu bentuk muncul berkali-kali - mungkin 'Shape_Colour_Map'.
Jonathan Leffler
2

Secara umum sebagian besar database memiliki semacam konvensi penamaan untuk indeks, kunci primer, dan sebagainya. Di PostgreSQL, penamaan berikut telah disarankan:

  • kunci utama: tablename_columnname_ pkey
  • kendala unik: tablename_columnname_ key
  • batasan eksklusif: tablename_columnname_ excl
  • index untuk tujuan lain: tablename_columnname_ idx
  • kunci asing: tablename_columnname_ fkey
  • urutan: tablename_columnname_ seq
  • pemicu: tablename_actionname_after | before_ trigonometri

Tabel Anda adalah tabel yang ditautkan ke saya. Agar tetap sejalan dengan penamaan di atas, saya akan memilih yang berikut:

  • tabel tertaut: tablename1_tablename2_ lnk

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).

  • atau menyukai tabel: nama tujuan_ lnk
Frankenstein
sumber
1
Baik notasi Hungaria, kita bertemu lagi.
Dan Bechard
1

Saya selalu menyukai istilah "Meja Hamburger". Tidak tahu mengapa - kedengarannya bagus.

Oh, dan saya akan memanggil tabel ShapeColor atau ColorShape tergantung pada tabel mana yang lebih umum digunakan.

kendali
sumber
1

Tabel "Banyak-Banyak". Saya akan menyebutnya "Bentuk Warna" atau sebaliknya.

gbn
sumber
1

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.

Joe Holloway
sumber
1

Mungkin saja ColoredShape?

Saya tidak yakin saya mendapatkan pertanyaan itu. Apakah ini tentang kasus khusus ini atau Anda mencari pedoman umum?

mafu
sumber
0

Saya akan menamainya dengan nama persis dari tabel yang digabungkan = ColorShape.

DOK
sumber
0

Sebagai kecocokan dengan Seni Pengembang yang terkait,

ColorShape

akan menjadi konvensi penamaan biasa. Dalam diagram ER, ini akan menjadi relasi.

jaestevan
sumber
0

Sebut saja tabel referensi silang.

XREF_COLOR_SHAPE
(
     XCS_ID INTEGER
     C_ID   INTEGER
     S_ID   INTEGER
)
EvilTeach
sumber
0

Saya akan menggunakan r_shape_colorsatau r_shape_colorbergantung pada artinya.
r_akan menjadi pengganti xref_dalam kasus ini.

Marius Burz
sumber
0

Pilihan saya adalah untuk nama yang paling menggambarkan tabel. Dalam hal ini mungkin saja ShapeColortetapi 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.

magnus
sumber
0

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.

monojohnny
sumber
0

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.

Breeno
sumber