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

时间:2018-02-06 21:20:22

标签: mysql database

假设我在MySQL 5.7上有两个表

Film
---
ID
name
location
year
user_id
actors

Actor
---
ID
name
born
location

然后我想将每个演员与一部电影联系起来,因此每个film条目都会actors作为array [5, 2, 12]和{{1}}一样。

现在,这是一种方式,我被告知。这是合适的方式吗?这是正确的吗?错?

4 个答案:

答案 0 :(得分:4)

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

你必须在你的actor表中创建一个包含电影ID的外键。但在那里你只能为每个演员拍一部电影。

如果在BETWEEN这些表之间创建表,则可以访问这两个表并将它们与join结合使用。因此,每个演员都可以在不止一部电影中出演。

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

答案 1 :(得分:1)

不要在表格中使用逗号分隔值。不要在Films表中使用Actors和Films,而是创建另一个名为film_actors的表,或者如果你需要一个表为actor信息,也可以创建一个Actors表。然后在电影演员中为电影中的每个演员创作一个新的条目。搜索这些较少的列和一个简单的int而不是整行的其他信息加上解析逗号的费用要小得多。来自film_actors的一些数据样本应如下所示:

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

搜索csv列要比搜索所有电影中的电影更加沉重,因为这些电影中的电影= x和演员= y。

答案 2 :(得分:1)

在关系数据库中,不应该存储一个字段数组,而应该将每个id的记录存储在一个单独的相关表中。

在这个特定情况下,你可以制作一部有很多演员的电影,而且这部影片的每个演员也可以在其他不同的电影中工作,所以这种关系很多很多。

为了模拟这种关系,你实际上需要一个第三个表来保存相关演员的ids并拍摄作品。

像这样:

薄膜

ID
命名
位置
今年
user_id

演员

ID
命名
出生
位置

ActorInFilm

actorId来
FilmID

答案 3 :(得分:0)

您可以使用仍由数据库引擎查询的MySql JSON field to store arrays or lists