MySQL Veritabanı tasarımı nasıl

5 Cevap php

MovieID, PersonID ve rolü: I 3 sütun 'movie2person' adlı bir tablo var. Ben 'film' tablo ve 'kişilerin' tablo ... çok-çok ilişkisi betwen bağlamak için bu tabloyu kullanabilirsiniz ..

I have selected movieID and personID both as primary keys... The problem is that sometimes I need to enter the same personID for the same movieID several times and I can't do it because only one combination of the same movieID and personID is permited...

Bunu nasıl yapabilirim?

Teşekkürler ..

5 Cevap

Ya birincil anahtar rol dahil, ya da masaya yeni bir yapay anahtarını ekleyin ve dışında bu tablonun kullanmak olmaz birincil anahtar olarak bu yeni sütunu kullanın.

Yaptığınız bazı açıklamalara dayanarak, ben daha fazla normalleşme gerektiğini düşünüyorum. Bir rol tablo oluşturun ve buna göre arama tablosunu ayarlamak

movie
+----+------------+
| id | title      |
+----+------------+
|  1 | Braveheart |
+----+------------+

person
+----+------------+
| id | name       |
+----+------------+
|  4 | Mel Gibson |
+----+------------+

role
+----+------------+
| id | title      |
+----+------------+
|  1 | Director   |
|  2 | Actor      |
+----+------------+

movie2person
+---------+----------+--------+
| movieID | personID | roleID |
+---------+----------+--------+
|       1 |        4 |      1 |
|       1 |        4 |      2 |
+---------+----------+--------+

Bu kurulum ile movie2person üzerinde üç sütun bileşik birincil anahtar olurdu.

İlköğretim tuşları "Bu, bu satırın benzersiz bir tanımlayıcı" demek içindir.

Eğer aynı değerler ile çok sayıda satır ekleme yapıyorsanız, o birincil anahtar değil.

Eğer satırlar için tam çiftleri eklemek için planlıyorsanız, o zaman hiç bir birincil anahtar yok ve iyi için bırakın gerekir.

Ancak, her bir (MovieID, PersonID) çifti için farklı roller eklemek için planlıyorsanız, o zaman sadece birincil anahtar rol eklemek ve gitmek için iyi bir konum.

Birincil anahtar olarak erkek her üç sütun.

Ben tasarım bazı değişiklikler önerdiğim:

  1. Movie2Person gelen MoviePerson_xref için tablonun adını değiştirin. Bu sucha formatında isim ve masa adlandırma kuralları numaraları exlude genellikle standarttır.

  2. Bu tablo movieperson_xrefID denilen kendi birincil anahtar olmalıdır.

  3. Daha sonra film kimlikleri ve kişinin kimlikleri bütün kombinasyonlarını kaydedebilirsiniz.