Saya memiliki tabel Producers
dan tabel Products
, yang keduanya berbentuk:
Id
- int, Kunci primerName
- nvarchar
Seorang Produser dapat membawa banyak Produk, jadi saya akan membuat tabel bernama ProducerDetails
yang akan memiliki:
ProducerId
- int, Kunci asing untukProducers.Id
ProductId
- int, Kunci asing untukProducts.Id
Kemudian saya mulai bertanya pada diri sendiri, jadi saya pikir saya akan bertanya kepada para ahli. Apakah akan lebih baik desain database untuk memiliki Id
kolom tambahan (int, kunci utama) di ProducerDetails
tabel saya ? Atau itu tidak perlu?
Saya menggunakan SQL-Server 2008 R2 jika itu membuat perbedaan sama sekali.
EDIT - Hubungan antara tabel ini akan banyak-ke-banyak saya percaya, maaf saya tidak menjelaskannya. Seorang produsen dapat membawa banyak jenis produk, dan produk yang sama dapat diproduksi oleh banyak produsen yang berbeda.
Saya minta maaf jika pertanyaan ini terlalu sederhana, integritas referensial / desain basis data bukan alasan kuat saya (walaupun saya sedang mencoba untuk memperbaikinya).
sumber
id
bidang dalam tabel hubungannya?ProductId, ProducerId
merupakan kombinasi unik, saya tidak melihat perlunya menambahkan kunci buatan lain ke tabel Gabung. Sepakat? Dan saya pikir, kecuali saya salah memahami pertanyaan, OP bahkan tidak perlu menggunakan tabel Gabung untuk kasus penggunaan ini.Tidak, tidak ada nilai dalam menambahkan "kunci utama" tambahan ke tabel ini. Gabungan Anda hanya akan merujuk
ProducerID
danProductID
, jadi itu hanya bobot mati. MENURUT OPINI SAYA.Meskipun saya setuju dengan @Shark bahwa tabel bergabung sepertinya tidak diperlukan di sini, kecuali jika Anda tidak ingin mengubah skema tabel yang ada dengan cara apa pun.
Sebagai tambahan, saya juga berpikir ada baiknya untuk memberi nama pengidentifikasi utama Anda secara penuh (misalnya
Products.ProductID
alih-alihProducts.ID
) sehingga pengidentifikasi secara konsisten disebutkan di seluruh skema.sumber
ProductID
). Satu keuntungan adalah bahwa ketika Anda melihatSometableID
, Anda langsung tahu tabel yang dimaksud. Yang lain adalah Anda bisa menggunakanProduct JOIN ProducerDetail USING(ProductID)
sintaks, alih-alih lebih lamaProduct JOIN ProducerDetail ON Product.ID = ProducerDetail.ProductID
USING(ProductID)
ini tidak tersedia di SQL-Server, jadi titik itu tidak berlaku.