Dalam berbagai CMS open source, saya perhatikan ada tabel terpisah untuk memetakan dua tabel relasional. Seperti untuk kategori dan produk, ada product_category_mapping
tabel terpisah . Tabel ini hanya memiliki kunci utama dan dua kunci asing dari kategori dan tabel produk.
Pertanyaan saya adalah apa manfaat dari desain database ini daripada hanya menghubungkan tabel secara langsung dengan mendefinisikan kunci asing di kedua tabel? Apakah hanya masalah kenyamanan?
sumber
Itu cara mudah untuk menerapkan hubungan banyak ke banyak .
Pertimbangkan dua tabel ini:
Jika Anda menambahkan
categoryID
bidang keproduct
, setiap produk hanya dapat memiliki satu kategori. Tetapi jika kita memiliki yangproduct_category_mapping
seperti ini:maka kita dapat memiliki:
Jadi produk 1 adalah dari kategori 1 & 2 dan produk 2 dari kategori 3 & 1, begitu banyak produk termasuk dalam banyak kategori, dan banyak kategori memiliki banyak produk.
Seperti yang ditulis tdammers , tabel ini sering disebut sebagai tabel tautan atau tabel jembatan, dan saya bahkan pernah melihatnya disebut sebagai tabel HABTM, dari HasAndBelongsToMany yang rupanya Ruby on Rails berbicara bagi banyak orang. Dan Wikipedia menyebutnya tabel persimpangan dan memiliki beberapa nama lagi untuk itu.
sumber
mappingID
kunci yang valid , satu skenario umum adalah untuk lebih baik melacak impor / ekspor besar-besaran di mana tabel persimpangan memegang banyak kunci asing.Alasan untuk menggunakan tabel pemetaan adalah untuk menghilangkan duplikasi. Silakan dan coba beberapa teknik pemetaan lainnya. Anda tidak akan dapat mencegah duplikat data tanpanya.
Dan itu membawa pertanyaan 2cd. Mengapa repot-repot menghilangkan duplikasi? Jadi, Anda hanya perlu mengedit data 1 kali di 1 tempat. Terkadang ada hukuman kinerja untuk menghilangkan duplikasi. Di lain waktu ada PENINGKATAN kinerja untuk menghilangkan duplikasi. Misalnya, lebih cepat mengisi daftar drop-down dengan nilai pencarian yang dinormalisasi, daripada memilih nilai duplikat yang berbeda dalam tabel besar.
sumber