Bir tablo değeri için birden fazla anahtar?

4 Cevap php

Ben terminoloji muhtemelen google bana yardımcı değildir nedeni olduğu, yanlış eminim. Umarım ... Neyse burada benim problem ve belki benim gerçek sorunun ne olduğunu anlamak olabilir

Tamam en MOVIE bu tablo şimdi değerleri (sütunlar?) Name, ReleaseDate ve Staring için vardır Ben denilen bir tablo var diyelim benim Sorun nasıl i Staring değeri birden çok değer içeren var mı?

Ben .. sütunları Key, Actor1, Actor2 vb STARS, ayrı bir tablo yapmak mı? Nerede STARS tablosunun PK için MOVIE tablo noktalarından Staring değer.

Key | Aktör 1 | Oyuncu 2 | .....
----------------------------------
01 | Bob Bob | John Bob | .......
02 | Jim Bob | John Bob | .......

Ancak, bu sorun tablo statik olacak ve aktörlerin önceden belirlenmiş bir sayıda olması gerekir olmasıdır.

OR

MOVIE tablosundan Staring değerleri birden actorID ait (PK adlı Actors tablodan) depolamak için bir yolu var mı? örneğin:

Name | ReleaseDate | Staring
-------------------------------------
blah | 1999 | 21, 46, 392, 182, 30
blah pt2 | 2001| 3, 11, 412

Neyse bir şey bu noktada yardımcı olacak ve büyük takdir edilecektir.

4 Cevap

Bu durumun, genelde 3 tabloları kullanın:

  • Aktörler veri için 1 tablo; aktör başına bir satır; Birincil anahtar = aktör kimliği
  • Filmler veriler için 1 tablo; film başına bir satır; Birincil anahtar = filmin kimlik
  • Olanlar arasında bir bağlantı görevi görür 1 tablo; Birincil anahtar = filmin filmin + kimlik kimlik


Here, it would mean :

  • STARS
    • kimlik
    • isim
  • MOVIE
    • kimlik
    • başlık
    • release_date
  • MOVIES_STARS
    • kimlik_movie
    • kimlik_star

Ve, bir film almak için:

select * 
from movie
where kimlik = X

Ve bu filmde aktörleri almak için:

select stars.*
from stars
    inner join movies_stars on movies_stars.kimlik_star = stars.kimlik
where movies_stars.kimlik_movie = X

Gerekirse Ve hatta, filmleri masaya katılabilir ;-)


A couple of keywords :

Genellikle, bir "çok-çok" Aktörler :: Filmler için olduğu gibi ilişkinin türü, böyle bir şey baktım ayrı üçüncü bir tablo olurdu:

autoid | Actor | Movie
----------------------
 1        43      47
 2        36      22
 3        36      28
 4        17      47

Bu tablonun Aktör ve Film sütunlardaki değerler Aktörler ve Filmler listeleyen ayrı tablolar satır birincil anahtar kimlikleri tekabül etmektedir. Id 47 olan bir film için tüm aktörlerin almak için WHERE Movie = 47 sorgusu olur; id 36 ile bir aktör için filmlerin tüm almak için, WHERE Actor = 36, vesaire sorgulamak istiyorum.

Aşağıdaki gibi İdeal olarak, normalize edilmiş çözelti, 3 tablolar sağlamaktır:

TABLE Movie:
    MovieID (INT)
    Name (VARCHAR)
    ReleaseDate (DATE)

TABLE Actor:
    ActorID (INT)
    Name (VARCHAR)

TABLE Cast:
    ActorID (INT) 
    MovieID (INT)

Ayrıca, kolon genel olarak 'alanlar "olarak adlandırılır

hmmm, bu çok temel bir normalleşme sorundur. Eğer söylediklerini, ben size film ilişki First Normal Form olmadığını söyleyebiliriz. ne yapmalıyım, nasıl 1nf içine normalleştirmek için mi? İki niteliklerini, adını ve aktör olan bir zayıf varlık kümesi ya da ilişki, diyelim ki, MOVIE_STAR oluşturmak. o zaman birincil anahtar olarak adını ve aktör hem de yapmak gerekir. i Ad niteliği film ilişkinin birincil anahtar olduğunu burada kabul unutmayın. ben bu yardımcı olur umarım ... Bir düşünce sadece!