mysql - 这两张表需要什么样的关系?
问题描述
我有 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 ???????
)
显然,我将“旅行者”作为我的第二张桌子内的一列。因此,与第一个表存在关系。但它是什么?我想我需要以某种方式制作外键?
解决方案
您正在寻找一个联结/关联表。表格应如下所示:
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)
);
推荐阅读
- swift - 如何在 Swift 中本地化 tableView?
- php - 如何使列表目录中的文件夹显示为按钮,文件显示为可下载的链接?
- swift - Swift:SimplePing 计时器未触发
- javascript - 如何防止用户轻易访问localStorage
- javascript - EJS 在 Javascript 中拆分语句的规则是什么?
- html - chrome突然没有在表格内包裹内联块
- c++ - 如何访问 Boost Graph 中的边缘信息?
- r - 来自闪亮的 runApp() 不适用于代码或 RStudio 的按钮
- python-3.x - 标签不会出现在 tkinter 弹出窗口上
- javascript - 为什么在类方法中使用我的实例属性未定义?