Database design 电影、演员、导演之间的模型关联。。。用CakePHP实现etc

Database design 电影、演员、导演之间的模型关联。。。用CakePHP实现etc,database-design,cakephp,associations,cakephp-1.3,Database Design,Cakephp,Associations,Cakephp 1.3,我正在尝试找出设置表/模型关联的最佳方法 我有一张电影表。每部电影可以有零个或多个演员、导演、出版商、作家。。。等等 如果我为每种类型的人使用不同的表格/模型,我可以设置得很好。。。但这似乎不干净 我的想法是使用一个People模型/表,将HABTM设置为PeopleType,将HABTM设置为Movie 这可以很好地将特定的人链接到电影,但是。。。像克林特·伊斯特伍德这样的人呢?他会是一部电影的导演,另一部电影的演员,甚至可能两者兼而有之。电影怎么知道它指的是哪种类型 只是我不知道最好的方法是

我正在尝试找出设置表/模型关联的最佳方法

我有一张电影表。每部电影可以有零个或多个演员、导演、出版商、作家。。。等等

如果我为每种类型的人使用不同的表格/模型,我可以设置得很好。。。但这似乎不干净

我的想法是使用一个
People
模型/表,将HABTM设置为
PeopleType
,将HABTM设置为
Movie

这可以很好地将特定的人链接到电影,但是。。。像克林特·伊斯特伍德这样的人呢?他会是一部电影的导演,另一部电影的演员,甚至可能两者兼而有之。电影怎么知道它指的是哪种类型

只是我不知道最好的方法是什么。

在您的加入表中: 电影与人

您可以为类似“角色”的内容添加一个额外字段。你将在电影中指定人物的角色。然后可以将客户端Eastwood添加到联接表中两次,对于他在该电影制作中扮演的每一个角色,

因为一个人可以在一部电影中担任导演,而在另一部电影中担任演员,您使用“人物类型”的方法似乎不太好,因为您的
人物
表将包含属于多种类型的每个人的重复信息。我将为每种类型的
导演
演员
出版商
等创建一个表
人物详细信息
和特定表,并使用外键创建
人物详细信息
表<代码>导演
演员
出版商
表格还将包含仅针对相应类型人员的任何列


总之,
Actor
belongsTo
PersonDetails
Director
belongsTo
PersonDetails
Actor
HABTM
Movie
Director
HABTM
Movie
另一种方法:

people_types (id, name)
people_details (id, first_name, last_name, ....)
people (id, person_details_id, person_type_id)
movies_people(id, person_id, movie_id) 
movies (id, title, ...)

“角色”仅仅是一个字符串,还是“人物类型”的id?我可能会将人物类型重命名为角色,因为一个人可以扮演多个人物类型是令人困惑的。若我正确理解你们的问题,那个么这个角色似乎更有意义。一个人可以在电影制作中扮演0个或多个角色。我想我的问题更多的是关于关联,而不是字段名。“角色”字段是人员类型的id还是字符串?(我想应该是身份证)要么我不理解你,要么你误解了我说的话。在我的示例中,people表中不会有重复。HABTM表格“people\u people\u types”将包含一个“person\u id”和一个“people\u type\u id”,这两个id希望一个人拥有一个或多个people\u类型。另外,你能解释一下,为什么你认为在每个人都有相同数据的情况下,为每种人都建立一个表格会更好?这似乎比迄今为止提到的任何事情都要重复。在你的例子中,像克林特·伊斯特伍德这样的人不会在两张不同的桌子上占一席之地吗(或者更多?),我误解了你。不过,我的答案是正确的。由于实现和理解的简单性,最好为每种类型都有一个表。不会有重复,因为任何重复的(不同人员类型之间的)列都应该在
people\u details
表中。克林特·伊斯特伍德的详细信息将在
人员详细信息
表中
actors
表将有一个记录,其中包含
person\u details\u id
引用
person\u details
表中Clint Eastwood的id
directors
表中会有一条记录,其中包含
person\u details\u id
引用
person\u details
表中Clint Eastwood的id。因此,没有数据重复,只有外键。看看好的。。。所以,我终于明白了你要我做什么——显然有人喜欢你的答案(+1分)——你能再解释一次为什么这样更好吗,因为这会在我的数据库中增加6-8个额外的表,这在我看来是逆向逻辑的。你的问题没有一个正确的答案。你可以通过不同的方式实现你想要的。你可以自己决定使用哪种方法。在Cakephp中,维护修改后的(通过添加额外列)联接表
movies\u people
很复杂。为什么这比去掉“people\u details”表更好?我不明白为什么我会把细节和人物表分开——这似乎有些过分了?因为克林特·伊斯特伍德是一名演员和导演。如果在本例中不使用
人员详细信息
表,则需要在
人员
表中有
姓名
姓氏
列。因此,您将有两个Clint Eastwoods行,它们具有完全相同的
first_name
last_name
列—一个作为演员,另一个作为导演。那就是重复数据。啊!我认为这个有道理/看起来不错。因此,在
人员
表中会有重复,但只会重复到
人员详细信息
表的链接(ID),而不是实际数据,对吗?这个对我来说更有意义。再次感谢您的帮助。最终选择了人物类型、人物详细信息、人物详细信息、人物类型(其中有电影id)