SQL多对多关系表

问题描述 投票:0回答:1

我正在尝试在这两个表之间建立多对多关系。

CREATE TABLE series (
    title VARCHAR(30),
    language VARCHAR(30),
    year INT,
    PRIMARY KEY (title)
);

CREATE TABLE actors (
    name VARCHAR(30),
    age INT,
    country VARCHAR(30),
    serie VARCHAR(30),
    PRIMARY KEY (name , age , country , serie),
    FOREIGN KEY (serie)
        REFERENCES series (title)
);

我试图创建一个单独的表以形成多对多关系。这看起来正确吗?

CREATE TABLE series_actors_combined (
    title VARCHAR(30),
    name VARCHAR(30),
    age INT,
    country VARCHAR(30),
    serie VARCHAR(30),
    FOREIGN KEY (title)
        REFERENCES series (title),
    FOREIGN KEY (name)
        REFERENCES actors (name),
    FOREIGN KEY (age)
        REFERENCES actors (age),
    FOREIGN KEY (country)
        REFERENCES actors (country),
    FOREIGN KEY (serie)
        REFERENCES actors (serie)
   );
mysql sql database database-design many-to-many
1个回答
2
投票

您的桌子看起来不正确。

首先,在actors表中有一个引用该系列的外键,这基本上违反了桥表的目的。

此外,从桥表到角色的外键格式也不正确:每列只有一个键,而您应该有一个唯一的多列键来引用角色。我建议使用自动递增的主键,而不要使用这些列的组合。这为您的设计提供了更大的灵活性(在现实生活中,两个不同的系列might具有相同的标题),并使much更容易在桥表中创建外键。

考虑:

create table series(
    id int primary key auto_increment,
    title varchar(30) unique,
    language varchar(30), 
    year int
);

create table actors(
    id int primary key auto_increment,
    name varchar(30), 
    dob date,     -- better than age 
    country varchar(30)
);

create table series_actors(
    series_id int references series(id),
    actor_id int references actors(id),
    primary key (series_id, actor_id)
)
© www.soinside.com 2019 - 2024. All rights reserved.