如何在一个表中插入多个外键?
Posted
技术标签:
【中文标题】如何在一个表中插入多个外键?【英文标题】:How to insert multiple foreign keys into a table? 【发布时间】:2022-01-19 09:23:31 【问题描述】:我是 SQL 新手,开始尝试清理数据集。这是我的原始表 (movies_details
)
ID movie release_year genre actors
---------------------------------------------------------------------
1 Movie_A 2010 Romantic, Comedy Actor_A, Actor_B
2 Movie_B 2011 Documentary Null
3 Movie_C 2010 Comedy, Horror Actor_A, Actor_C
4 Movie_D 2020 Documentary Actor_B
我相信我首先需要创建一个满足 1NF 的新表,即创建原子值。所以我创造 3 个新表
movie
表:
movie_ID movie release_year
----------------------------------
m_1 Movie_A 2010
m_2 Movie_B 2011
m_3 Movie_C 2010
m_4 Movie_D 2020
genre
表:
genre_ID genre
---------------------
g_1 Romantic
g_2 Comedy
g_3 Documentary
g_4 Horror
actor
表:
actor_ID actors
--------------------
a_1 Actor_A
a_2 Actor_B
a_3 Actor_C
我知道对于每个表,我们都需要一个外键链接到数据库中的所有表。我的问题是,一旦我为每个新表分配了一个外键,就会再次出现不满足 1NF 的问题。例如,如果我将外键添加到流派表中,它将是 如:
genre_ID genre movie_ID actor_ID
-----------------------------------------------------
g_1 Romantic m_1 a_1, a_2
g_2 Comedy m_1, m_3 a_1, a_2, a_3
g_3 Documentary m_2 Null, a_2
g_4 Horror m_3 a_1, a_3
如果我向每个表添加外键,它会变得更加复杂。我该如何修复这个 genre
表,因为 1NF 问题似乎无法以这种方式解决?
【问题讨论】:
不,您不需要为数据库中的每个表添加外键。每个表都需要一个与它相关的表的外键。当您分析主题时,您需要了解实体以及它们之间的关系。这将告诉您需要哪些外键。 【参考方案1】:您要建模的是两个多对多关系,因此您需要为每个关系实现一个关联表。
-
MovieGenre 与 FK 到电影和类型
MovieActor 与电影和演员的 FK
两个表中的主键是 FK 的组成。
【讨论】:
【参考方案2】:到这里为止,您需要在设计中添加另外两个表格。 N : M
关系的原因是你的movie_table
表和genre_table
表之间的关系,你需要把这个关系分解成Table_XYZ
表来保持这两个表之间的关系,它的结构如下所示:
Table_XYZ
movie_ID genre_ID
m_1 g_2
m_1 g_1
m_2 g_3
另外,movie_table
表和actor_table
表之间存在N:M
关系,您需要添加Table_MNO
,它会像:
Table_MNO
movie_ID actor_ID
m_1 a_2
m_1 a_1
m_2 a_3
m_2 a_1
m_2 a_5
【讨论】:
以上是关于如何在一个表中插入多个外键?的主要内容,如果未能解决你的问题,请参考以下文章