如何将多个外键插入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。

  1. 具有电影和类型 FK 的 MovieGenre
  2. 具有电影和演员 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_tabletable和actor_tabletable之间存在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