表值的多个键?

问题描述:

我敢肯定,我的术语是错误的,这可能是谷歌没有帮助我的原因。反正这里是我的问题,也许你可以推断出我真正的问题是什么...我希望表值的多个键?

好让我们说我有一个表称为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

无论如何,任何事情都将在这一点上的帮助,将不胜感激。

在这种情况下,你一般使用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

通常情况下,一个“多对一对多”的关系的类型是行动者::电影的情况下,你必须看起来像这样一个单独的第三个表:

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等等。

在理想情况下,归一化的解决方案是有3个表,如下所示:

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

TABLE Actor: 
    ActorID (INT) 
    Name (VARCHAR) 

TABLE Cast: 
    ActorID (INT) 
    MovieID (INT) 

另外,柱通常被称为“场”

嗯,这是一个非常基本的标准化问题。从你说的话,我可以说你的电影关系不在第一范式。你应该做的是将它归一化为1NF,怎么样?你创建一个弱的实体集合或关系,比如MOVIE_STAR,它有两个属性,名称和演员。那么你应该把名字和演员都当成主键。注意我在这里假设name属性是电影关系的主键。我希望这可以帮助...只是一个想法!