表值的多个键?
我敢肯定,我的术语是错误的,这可能是谷歌没有帮助我的原因。反正这里是我的问题,也许你可以推断出我真正的问题是什么...我希望表值的多个键?
好让我们说我有一个表称为MOVIE
此表有Name
,ReleaseDate
和Staring
值(列?)现在我的问题是我如何让Staring
的值包含多个值?
我可以制作一个单独的表STARS
列Key
,Actor1
, Actor2
等...? MOVIE
表中的Staring
值指向STARS
表的PK。
Key |演员1 |演员2 | .....
----------------------------------
01 | Bob Bob |约翰鲍勃| .......
02 |吉姆鲍勃|约翰鲍勃| .......
但是,问题在于该表将是静态的,并且需要具有预设数量的参与者。
OR
是否有存储多个actorId来的(PK的从Actors
表)从MOVIE
表Staring
值的方法吗?例如:
名称| 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
你甚至可以加入到电影的表,如果需要的话;-)
几个关键字:
通常情况下,一个“多对一对多”的关系的类型是行动者::电影的情况下,你必须看起来像这样一个单独的第三个表:
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属性是电影关系的主键。我希望这可以帮助...只是一个想法!
啊现在我看到谢谢你为我解释这个 – JeffBeltran 2010-02-10 09:59:31
不客气:-)玩得开心! – 2010-02-10 11:20:45