MySQL - 在表中将ID存储为数组

5

假设我在MySQL 5.7上有两个表格

Film
---
ID
name
location
year
user_id
actors

Actor
---
ID
name
born
location

我希望能够将每个演员与电影进行关联,这样每个 film 条目都会有一个像 [5, 2, 12] 这样的 actors 数组。

这是一种方法,据我所知。这是适当的方式吗?正确的还是错误的?


了解一对多和多对多关系。 - isaace
4个回答

8

enter image description here如果我理解正确:

您需要在演员表中创建一个包含电影ID的外键,但每个演员只能参演一部电影。

如果您在这些表之间创建一个中间表,您可以访问两个表并将它们与联接组合。因此,每个演员可以参演不止一部电影。

永远不要将数组保存在数据库中,因为无法使用select命令访问该数组。


谢谢,我会把这个给我的老板看。我会准确地告诉他你说的话。MySQL是一个关系型数据库,它可以保持关系并在查询过程中帮助代码保持内聚性。谢谢! - test
我认为在nosql中,这些概念会混淆(我自己也曾经有过这种想法),感谢您让这一点变得如此清晰明了。 - twknab

2

在关系型数据库中,与其将一个id数组存储在一个字段中,你应该为每个id在一个单独的相关表中存储一条记录。

在这种情况下,你可以有一部电影有很多演员,而且这些演员也可能在其他不同的电影中工作,因此关系是多对多的。

为了建模这种关系,你实际上需要一个第三个表来保存相关演员和电影的ids。

就像这样:

电影

ID
名称
位置
年份
用户ID

演员

ID
名称
出生日期
位置

演员参演电影

演员ID
电影ID


2

不要在表格中使用逗号分隔的值。而是在电影表中创建一个名为film_actors或其他名称的新表,如果需要演员信息表,则还需创建一个演员表。然后在电影演员表中为每个参演演员创建一个新条目。这样搜索较少的列和简单的整数比搜索一整行其他信息并解析逗号要容易得多。film_actors中的一些数据示例应如下所示:

film : 1, actor : 2 , 
film : 1, actor : 4, 
film : 2, actor : 2

在csv列中搜索要比搜索所有电影中的电影= x和演员= y更加费力。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接