gpt4 book ai didi

mysql - 正确的数据库设置 - 连接太多?

转载 作者:可可西里 更新时间:2023-11-01 09:01:20 24 4
gpt4 key购买 nike

我正在建立一个数据库,其中包含电影、导演、摄影师、 Composer 等。

现在每部电影都有一行包含标题、描述等。此外,应该有一列用于导演、 Composer 等。

我不想在电影表的每一行中重复导演的名字,所以我将导演放在不同的表中,将 Composer 放在不同的表中等等。

然后在电影表中,我用外键引用了导演、 Composer 等的数据。

为了获取电影的所有数据,我会创建一个 View ,将所有表连接在一起,这样单个 MySQL 查询就会为我提供电影的人类可读信息。

这是执行此操作的好方法吗?还是多个左连接不是一个好主意?

View 看起来像这样(有点)

SELECT `movies`.`title` as `title`, `movies`.`description` as [...],
`directors`.`name` as `name` [...], `composers`.`name` as `cname` [...]
from
`movies`
left join
`directors` on `movies`.`directors_id`=`directors`.`id`
left join
`movies`.`musicians_id` = `musicians`.`id` [...]

这会是一种有效的方法吗?

最佳答案

正如 Gordon Linoff 所说,这称为规范化,一般是一种存储数据的好方法。

在定义表的方式中,您当然需要 LEFT 联接。如果将 LEFT 连接替换为 INNER JOIN,那么对于没有音乐家或导演的电影,结果中将根本没有行。

但是,您提议的标准化最终会产生许多针对电影行业中不同创意角色的表格。即使要涵盖获得奥斯卡奖和其他奖项的主要创意角色,您也需要十张或更多的 table 。

避免这种情况的一种常见方法是为电影使用一个表,为广告素材使用一个表。第三张表用于连接不同角色的两者。例如:

TABLE CREATIVE_ROLES_LINK ( LIKN_ID INT, MOVIE_ID INT, ROLE_NAME VARCHAR(30), PERSON_ID INT);

上面显示了基本思想。实际上,可以使用存储在另一个表中的 ROLE_NAME 完成更多规范化。

关于mysql - 正确的数据库设置 - 连接太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com