2010-02-10 59 views
1

我敢肯定,我的術語是錯誤的,這可能是谷歌沒有幫助我的原因。反正這裏是我的問題,也許你可以推斷出我真正的問題是什麼...我希望表值的多個鍵?

好讓我們說我有一個表稱爲MOVIE此表有NameReleaseDateStaring值(列?)現在我的問題是我如何讓Staring的值包含多個值?

我可以製作一個單獨的表STARSKey,Actor1, Actor2等...? MOVIE表中的Staring值指向STARS表的PK。

Key |演員1 |演員2 | .....
----------------------------------
01 | Bob Bob |約翰鮑勃| .......
02 |吉姆鮑勃|約翰鮑勃| .......

但是,問題在於該表將是靜態的,並且需要具有預設數量的參與者。

OR

是否有存儲多個actorId來的(PK的從Actors表)從MOVIEStaring值的方法嗎?例如:

名稱| ReleaseDate | 盯着
-------------------------------------
blah | 1999 | 21,46,392,182,30
blah pt2 | 2001 | 3,11,412

無論如何,任何事情都將在這一點上的幫助,將不勝感激。

回答

1

在這種情況下,你一般使用3個表:

  • 1臺爲演員的數據;每個演員一行;主鍵=演員的ID
  • 1個電影數據表;每部電影一行;主鍵=電影的ID
  • 1表格,作爲那些之間的鏈接;主鍵=膜


這裏的膜+ ID的ID,這將意味着:

  • STARS
    • ID
    • 名稱
  • MOVIE
    • ID
    • 標題
    • RELEASE_DATE
  • MOVIES_STARS
    • id_movie
    • id_star

而且,挑選影片:

select * 
from movie 
where id = X 

而獲得的那部電影的演員:

select stars.* 
from stars 
    inner join movies_stars on movies_stars.id_star = stars.id 
where movies_stars.id_movie = X 

你甚至可以加入到電影的表,如果需要的話;-)


幾個關鍵字:

+0

啊現在我看到謝謝你爲我解釋這個 – JeffBeltran 2010-02-10 09:59:31

+0

不客氣:-)玩得開心! – 2010-02-10 11:20:45

1

通常情況下,一個「多對一對多」的關係的類型是行動者::電影的情況下,你必須看起來像這樣一個單獨的第三個表:

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

其中此表的Actor和Movie列中的值對應於列出Actor和Movies的單獨表中的主鍵ID。要獲得id爲47的電影的所有演員,請查詢WHERE Movie = 47;要獲得id爲36的演員的所有電影,請查詢WHERE Actor = 36等等。

1

在理想情況下,歸一化的解決方案是有3個表,如下所示:

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

TABLE Actor: 
    ActorID (INT) 
    Name (VARCHAR) 

TABLE Cast: 
    ActorID (INT) 
    MovieID (INT) 

另外,柱通常被稱爲「場」

0

嗯,這是一個非常基本的標準化問題。從你說的話,我可以說你的電影關係不在第一範式。你應該做的是將它歸一化爲1NF,怎麼樣?你創建一個弱的實體集合或關係,比如MOVIE_STAR,它有兩個屬性,名稱和演員。那麼你應該把名字和演員都當成主鍵。注意我在這裏假設name屬性是電影關係的主鍵。我希望這可以幫助...只是一個想法!