Saya memiliki entitas yang tidak dapat eksis tanpa ditentukan oleh entitas lain, dan saya ingin entitas ini berpartisipasi dalam hubungan banyak ke banyak.
Contoh: Artis memiliki album (album tidak dapat ada tanpa artis), album ini juga memiliki banyak trek, tetapi trek yang sama dapat ada di banyak album.
Jadi kami memiliki hubungan banyak-ke-banyak antara album dan trek.
Jika album adalah entitas yang lemah, maka kunci utamanya adalah kunci asing yang merujuk artis tersebut, sehingga tidak dapat menjadi kunci asing ke tabel lain yang mewakili hubungan banyak ke banyak.
Pertanyaannya adalah: apakah mungkin untuk memiliki hubungan semacam ini dalam SQL, dan jika demikian, bagaimana cara saya mengungkapkannya?
database-design
foreign-key
referential-integrity
Raiden Freeman
sumber
sumber
artist_id
kunci asing yang merujuk pada artis tersebut. Jika Anda ingin satu trek dipetakan ke beberapa album kemudian gunakan tabel pemetaan dengantrack_id, album_id
. Mudah :)Jawaban:
Saya pikir Anda bisa, menggunakan diagram hubungan "berlian":
sumber
(albumID, trackNo)
dan menambahkan batasan Unik lainnya juga.Sayangnya saya tidak punya cukup perwakilan untuk mengomentari jawaban ypercubeᵀᴹ , jadi saya akan mengirim jawaban alternatif sebagai gantinya - Saya setuju dengan jawaban itu secara umum, tetapi saya pikir kunci primer dan kendala unik
AlbumTrack
salah karena album dan trek keduanya lemah. entitas. Misalnya, data yang valid berikut akan, dengan batasan yang ditentukan, dilarang:Sebagai gantinya saya akan mengatur
PRIMARY KEY (artistID, albumID, trackID)
dan menjatuhkan batasan unik, menghasilkan:Lagu masih dibatasi untuk muncul paling banyak satu kali per album.
Selain itu, pertanyaannya tidak benar-benar menentukan bahwa trek adalah entitas yang lemah (hanya itu albumnya) - jika trek sebenarnya bisa ada terlepas dari artis,
Track
danAlbumTrack
tabel didefinisikan sedikit berbeda:sumber