2014-10-09 109 views
2

我有一个MySQL数据库设置了我从MS Access数据库导入的所有电影列表。一个字段包含电影类型的可能值,电影可以具有多种类型,所以我需要一种支持此功能的数据类型。在访问中,我可以将一个表的'流派'链接到表格'电影'中的'流派'字段,所以我可以选择任何一个,每部电影一个或多个流派。当我切换到MySQL时,我使用SET数据类型来定义所有可能的值。到目前为止,一切都运行完美。 我现在试图在html/php中设置一个表来显示mysql表。我希望表格能够排序:标题,流派,质量,评级等。但是对于流派的排序,我需要设置数据类型的可能值。我不知道是否可以通过一些php命令/代码获取值,但是当我在网络上潜伏了一段时间后,我没有看到许多应用程序在使用SET数据类型时出现明显的负面原因。外键与SET数据类型MySQL

所以我开始研究外键的可能性。我在这里遇到的问题是 - 就我所知,钥匙只能包含一个可能的价值,这使我回到了问题的开始。我喜欢外键的想法,因为这会让我更容易在列表中添加新的流派。

我有没有可能忽略的可能性?是否可以从SET类型获取值到php或使用具有多种可能性的外键用于一条记录?

我知道我也可以手动将每个类型放在我的php脚本中,但是我想将它放在一个地方。所以如果我添加一部电影还没有定义,我可以在一个地方更新它,而其他所有东西都可以适应它。

+1

我会有另一个表'film_id,genre_id'每个电影根据需要的行数 – 2014-10-09 21:07:51

回答

0

Dagon绝对就在这里 - 你的后端表格结构有问题。你现在想要建立一个多对多的关系,而在目前的后端,你所能做的最好的是一对多的关系。

审查: 您有可以有很多流派 个人的电影和你有涉及到许多电影流派个人

关系数据库其实并不多模型与一个关系多对多的关系,他们使用递归一对多关系并创建两个连接。

为了模拟一个多对多的关系,你需要三个表 A片表(我想你已经有了) 一个种类表(我想你已经有了) 其作为衮建议将包括结合表两个字段电影ID和流派ID。

然后,您设置两个单独的一对多关系。一个从电影表到联结表,一个从风格表到联结表。

现在,如果您想知道电影的所有流派,只需在相关电影ID上过滤连接表,并且如果要了解具有某种流派的所有电影,请过滤流派ID上的连接表。

设置查找以将您的流派ID与文本描述关联起来,并且您可以随意更改文本描述,只要您想做就可以,而且如果您做得对,就可以更改文本描述,它将升级您表单中的每个值。

这是SQL和关系数据库设计背后的集合代数的绝对基本概念。