我需要制作一个包含列的“电影”表:
ID Title Description Category etc
另一个名为'Movie_Categories'的人包含,例如
ID Category
1 Action
2 Adventure
3 Triller
但由于表格中的类别将有多种选择,这是正确的方法吗?
我应该使用逗号分隔的值,就像有人在这篇文章Multiple values in column in MySQL中所说的那样,还是有更好的方式?
答案 0 :(得分:3)
这是一种多对多的关系。
您需要一个连接表才能使其正确,例如:
CREATE TABLE film_category (
category_id int,
film_id int,
PRIMARY KEY (category_id, film_id)
);
答案 1 :(得分:1)
不要去COMMA分离的价值观。 NEVER。
说完了。请记住,当你有一个所谓的多对多关系时,也就是说,你可以拥有一个包含许多电影的类别和一个包含多个类别的电影的关系,你将始终需要生成一个额外的表格。
此表仅需要其他2个表中每个表的主键,并且将具有复合键。
因此架构将最终成为:
粗体是主键。
要获得电影的所有类别,您只需加入三个表中的每一个。
关于拥有多值字段的最终评论是,您的表格不会在First Normal Form中,这迟早会给您带来很多麻烦。
答案 2 :(得分:0)
最后要做的是通过存储逗号分隔值来使用非规范化表格。 * 你应该有一个表电影和一个表类别。 您应该创建一个映射表,将movieId映射到categoryId *