gpt4 book ai didi

mysql - 我应该更改我的 MySQL 数据库结构吗?

转载 作者:行者123 更新时间:2023-12-01 00:37:22 25 4
gpt4 key购买 nike

这是我目前的Mysql结构。

2 个表:

1.) Movies
2.) Genres

两个表都由名为 movie_id 的列连接。

这是我的表结构的一个例子:


: 电影

movie_id          movie_name

1 Superman
2 Logan
3 The Hangover
4 8 Mile
5 The Dark Knight

表格流派

movie_id          genres_name
1 Science Fiction
1 Action
1 Fantasy
1 Adventure

2 Action
2 Drama
2 Science Fiction

3 Comedy

4 Music
4 Drama

5 Crime
5 Thriller
5 Action
5 Drama



现在很多人建议我把我的表结构改成这个:

:电影

movie_id          movie_name

1 Superman
2 Logan
3 The Hangover
4 8 Mile
5 The Dark Knight

表:Genres_id

genres_id          genres_name
1 Science Fiction
2 Action
3 Fantasy
4 Adventure
5 Drama
6 Comedy
7 Music
8 Thriller
9 Crime

表格流派

movie_id          genres_id
1 1
1 2
1 3
1 4

2 2
2 5
2 1

3 6

4 7
4 5

5 9
5 8
5 2
5 5

我目前正在使用第一个数据库结构。但是我应该把它改成第二个吗?但是会有什么好处呢?更好的速度? (我真的需要它)

如果您需要更多信息,请告诉我,谢谢。

最佳答案

第二种数据库结构有以下优点:

  • 通过实现参照完整性,不可能将无效类型分配给电影。在第一个选项中可能会出现拼写错误(例如 Sience Fiction)。为了避免在第一个选项中发生这种情况,可以添加一个数据库约束以仅允许某些值,但是列出这些值将非常接近实际为其创建第三个表,并且稍后允许新类型将需要 DML语句(而不是第二个选项中的简单 insert)。

  • 当电影数据有限,并且仍然有没有插入电影记录的流派时,用户没有简单的方法知道哪些流派可用,因为它们没有存储。在第一个选项中,它们可以作为约束值出现,但是没有 SQL 标准可以从数据库字典中检索它们。实际上,您只需在应用程序语言中复制这些知识,并在那里定义一个封闭的可能值数组。但这只是将数据责任从数据库中转移出来。

  • 它占用的空间更少。数字外键值比类型文本字符串占用更少的空间。不可否认,这些字符串仍将存储在一个(单独的)表中,但每个流派只存储一次。由于电影和相关电影流派表的记录通常多于不同可能流派的数量,因此会增加空间。这同样适用于想要在流派上创建的索引,因此列出特定流派电影的查询将高效运行。数字索引比文本字符串索引占用的空间更少。

  • 列出所有流派的查询将更高效地运行。这是一个常见的用例,例如,当您需要填充下拉列表框供用户选择流派时。

关于mysql - 我应该更改我的 MySQL 数据库结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529404/

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