假设我在MySQL 5.7上有两个表
Film
---
ID
name
location
year
user_id
actors
Actor
---
ID
name
born
location
然后我想将每个演员与一部电影联系起来,因此每个film
条目都会actors
作为array
[5, 2, 12]
和{{1}}一样。
现在,这是一种方式,我被告知。这是合适的方式吗?这是正确的吗?错?
答案 0 :(得分:4)
你必须在你的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
命名
出生
位置
actorId来
FilmID
答案 3 :(得分:0)
您可以使用仍由数据库引擎查询的MySql JSON field to store arrays or lists。