如何将多个外键插入table?
How to insert multiple foreign keys into a table?
我是 SQL 的新手,从尝试清理数据集开始。这是我的原创 table (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
我相信我首先需要创建一个新的 table 满足 1NF,即创建原子值。所以我创造
3 个新 tables
movie
table:
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
table:
genre_ID genre
---------------------
g_1 Romantic
g_2 Comedy
g_3 Documentary
g_4 Horror
actor
table:
actor_ID actors
--------------------
a_1 Actor_A
a_2 Actor_B
a_3 Actor_C
我知道对于每个 table 我们都需要一个外键链接到数据库中的所有 table。我的问题是,一旦我为每个新的 table 分配外键,又会出现不满足 1NF 的问题。例如,如果我将外键添加到类型 table 中,它将是
如:
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
如果我向每个 table 添加外键,它会变得更加复杂。我该如何解决这个问题 genre
table 因为 1NF 问题似乎无法通过这种方式解决?
您要建模的是两个多对多关系,因此您需要为每个关系实现关联 Table。
- 具有电影和类型 FK 的 MovieGenre
- 具有电影和演员 FK 的 MovieActor
两个表的主键都是外键的组成。
至此,您的设计还需要添加另外两个 table。 movie_table
table 和 genre_table
table 之间的 N : M
关系的原因,你需要将这种关系分解为 Table_XYZ
table 保持这两个 table 之间的关系,其结构如下所示:
Table_XYZ
movie_ID genre_ID
m_1 g_2
m_1 g_1
m_2 g_3
另外,movie_table
table和actor_table
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
我是 SQL 的新手,从尝试清理数据集开始。这是我的原创 table (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
我相信我首先需要创建一个新的 table 满足 1NF,即创建原子值。所以我创造 3 个新 tables
movie
table:
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
table:
genre_ID genre
---------------------
g_1 Romantic
g_2 Comedy
g_3 Documentary
g_4 Horror
actor
table:
actor_ID actors
--------------------
a_1 Actor_A
a_2 Actor_B
a_3 Actor_C
我知道对于每个 table 我们都需要一个外键链接到数据库中的所有 table。我的问题是,一旦我为每个新的 table 分配外键,又会出现不满足 1NF 的问题。例如,如果我将外键添加到类型 table 中,它将是 如:
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
如果我向每个 table 添加外键,它会变得更加复杂。我该如何解决这个问题 genre
table 因为 1NF 问题似乎无法通过这种方式解决?
您要建模的是两个多对多关系,因此您需要为每个关系实现关联 Table。
- 具有电影和类型 FK 的 MovieGenre
- 具有电影和演员 FK 的 MovieActor
两个表的主键都是外键的组成。
至此,您的设计还需要添加另外两个 table。 movie_table
table 和 genre_table
table 之间的 N : M
关系的原因,你需要将这种关系分解为 Table_XYZ
table 保持这两个 table 之间的关系,其结构如下所示:
Table_XYZ
movie_ID genre_ID
m_1 g_2
m_1 g_1
m_2 g_3
另外,movie_table
table和actor_table
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