外键与SET数据类型MySQL

时间:2014-10-09 21:06:36

标签: php mysql foreign-keys set

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

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

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

我知道我也可以手动将每个类型都放在我的PHP脚本中,但是我想把它放在一个地方。因此,如果我添加一个我尚未定义的类型的电影,我可以在一个地方更新它,其他一切都适应它。

1 个答案:

答案 0 :(得分:0)

Dagon绝对是正确的 - 你的后端表的结构存在问题。你想要建立一个多对多的关系,当前与你当前的后端,你可以做的最好的是一对多的关系。

要查看: 你有个别电影可以有很多类型 你有与许多电影有关的个人类型

关系数据库实际上并不模拟多对多关系,它们使用一对多关系的递归并创建两个连接。

要建模多对多关系,您需要三个表 电影桌(我认为你已经拥有) 一种类型表(我认为你已经拥有) Dagon建议的联结表将包括两个领域的电影id和流派id。

然后,您可以设置两个单独的一对多关系。一个从电影表到联结表,一个从流派表到联络表。

现在,如果您想了解电影中的所有类型,您只需过滤相关电影ID上的联结表,如果您想知道具有某种类型的所有电影,您可以过滤类型ID上的联结表。

设置查找以将您的类型ID与文本描述相关联,并且您可以根据需要随意更改文本描述,如果您已正确完成它,那么它将会升级表单中的每个值。

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