gpt4 book ai didi

sql - 设计源自单个表的多个多对多关系的正确或有效方法

转载 作者:行者123 更新时间:2023-12-04 14:41:42 24 4
gpt4 key购买 nike

我正在设计一个电影编目器,它将依赖于 SQL 数据库来存储数据。我不是数据库设计专家,老实说,除了基本的数据库查询之外,我对任何事情都不熟悉。我的问题是执行以下操作的最有效方法是什么。

我目前创建了 5 个表

Movies
------
[id] integer
[title] nvarchar(100)
[duration] integer
[year] datetime

People
------
[people_id] integer
[person] nvarchar(100)

Writers
-------
[id] integer
[people_id] integer

Directors
---------
[id] integer
[people_id] integer

Actors
------
[id] integer
[people_id] integer

基本上是使用连接表的多对多关系,电影->作家<-人物,电影->导演<-人物,最后是电影-> Actor <-人物。 People 表是从中提取每个角色所需数据的池。由于一个人可以是电影中的导演和明星,作家和导演,甚至这三个角色,我相信 3 个接线 table 可以解决这个问题。一个人自然也可以出现在许多电影中。所以我认为这是做到这一点的方法。

我通过几篇网络文章阅读了设置多对多关系的内容,读得越多,我就越对如何设置这种情况感到困惑。大多数只是解决一个领域或使用作者/书籍类比,这并不能帮助我理解如何实现我的情况。

如前所述,我的问题是,这是一种有效的方法吗?甚至是适当的?

我希望能够轻松查询电影,并将与其相关的所有信息导出到表单中。

谢谢
-Res

最佳答案

不要制作单独的表格,创建一个新表格,如 PeopleRoles包含 'Actor' , 'Director'等等,然后是一个关系表来立即加入电影、人物和角色:

Movies
------
[id] integer
[title] nvarchar(100)
[duration] integer
[year] datetime

People
------
[people_id] integer
[person] nvarchar(100)

PeopleRoles
-----------
[role_id] integer
[name] nvarchar(100)

MovieCollaborators
------------------
[id] integer
[people_id] integer
[movie_id] integer
[role_id] integer

您将获得灵活性,并能够使用单个 JOIN 从电影中轻松获取所有合作者。 .

关于sql - 设计源自单个表的多个多对多关系的正确或有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542552/

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