首页 > 解决方案 > 这两张表需要什么样的关系?

问题描述

我有 2 张桌子,想知道它们之间最好的关系是什么。我知道它们之间存在关系,但我对一对多、多对一、多对多、单向、双向、多向等感到非常困惑。

所以这是基本的显示结构:

旅客表:

+------------------------------------------+
| Name     | Family Name | National ID No. |
+------------------------------------------+
| Dianne   | Herbert     | 579643          |
| Francine | Jackson     | 183432          |
| Oprah    | Dingle      | 269537          |
+------------------------------------------+

行程表

+------------------------------------------------------------------------------------------------------+
| Start Station | End Station | Start Time | End Time | Travelers                                      |
+------------------------------------------------------------------------------------------------------+
| Hull          | Leeds       | 13:50      | 14:50    | Francine Jackson, Oprah Dingle                 |
| Newcastle     | Manchester  | 16:30      | 19:00    | Dianne Herbert, Francine Jackson               |
| Hull          | Manchester  | 10:00      | 13:00    | Dianne Herbert, Francine Jackson, Oprah Dingle |
+------------------------------------------------------------------------------------------------------+

旅行者表还可以,有道理:

CREATE TABLE Travelers ( 
    Name VARCHAR(50) NOT NULL,
    Family_Name VARCHAR(50) NOT NULL,
    National_ID_Number INT(6) NOT NULL PRIMARY KEY
)

但我不确定如何制作旅程表。特别是对于旅行者:

CREATE TABLE Journeys (
    Start_Station VARCHAR(50) NOT NULL,
    End_Station VARCHAR(50) NOT NULL,
    Start_Time VARCHAR(50) NOT NULL,
    End_Time VARCHAR(50) NOT NULL,
    Travelers ???????
)

显然,我将“旅行者”作为我的第二张桌子内的一列。因此,与第一个表存在关系。但它是什么?我想我需要以某种方式制作外键?

标签: mysqlsqlforeign-keysrelational-database

解决方案


您正在寻找一个联结/关联表。表格应如下所示:

create table Journeys (
    Journey_Id int auto_increment primary key,
    Start_Station VARCHAR(50) NOT NULL,
    End_Station VARCHAR(50) NOT NULL,
    Start_Time VARCHAR(50) NOT NULL,
    End_Time VARCHAR(50) NOT NULL
)

create table TravelerJourneys (
    traveler_journey_id int auto_increment primary key,
    traveler_id int(6),
    journey_id int,
    foreign key (traveler_id) references travelers(National_ID_Number),
    foreign key (journey_id) references Journeys (journey_id)
);

推荐阅读