Mysql 这两个表需要什么样的关系?
我有两张桌子,想知道他们之间最好的关系是什么。我知道它们之间有关系,但我对一对多、多对一、多对多、单向、双向、多向等感到困惑 这是基本的、显示的结构: 旅行者表:Mysql 这两个表需要什么样的关系?,mysql,sql,foreign-keys,relational-database,Mysql,Sql,Foreign Keys,Relational Database,我有两张桌子,想知道他们之间最好的关系是什么。我知道它们之间有关系,但我对一对多、多对一、多对多、单向、双向、多向等感到困惑 这是基本的、显示的结构: 旅行者表: +------------------------------------------+ |姓名|姓|国家身份证号| +------------------------------------------+ |戴安娜|赫伯特| 579643| |弗朗辛|杰克逊| 183432| |奥普拉·丁格尔269537| +-----------
+------------------------------------------+
|姓名|姓|国家身份证号|
+------------------------------------------+
|戴安娜|赫伯特| 579643|
|弗朗辛|杰克逊| 183432|
|奥普拉·丁格尔269537|
+------------------------------------------+
行程表
+------------------------------------------------------------------------------------------------------+
|起点站|终点站|起点时间|终点时间|旅客|
+------------------------------------------------------------------------------------------------------+
|赫尔|利兹| 13:50 | 14:50 |弗朗辛·杰克逊,奥普拉·丁格尔|
|纽卡斯尔|曼彻斯特| 16:30 | 19:00 |戴安·赫伯特,弗朗辛·杰克逊|
|赫尔|曼彻斯特| 10:00 | 13:00 |戴安·赫伯特、弗朗辛·杰克逊、奥普拉·丁格尔|
+------------------------------------------------------------------------------------------------------+
travelers表还可以,这很有意义:
CREATE TABLE Travelers(
名称VARCHAR(50)不为空,
家族名称VARCHAR(50)不为空,
国家标识号INT(6)非空主键
)
但我不确定如何做行程表。特别是对于旅行者:
创建表行程(
Start_Station VARCHAR(50)不为空,
End_站VARCHAR(50)不为空,
开始时间VARCHAR(50)不为空,
结束时间VARCHAR(50)不为空,
旅行者???????
)
显然,在我的第二张表格中有一列是“旅行者”。因此,这与第一个表有关系。但这是什么呢?我想我需要以某种方式生成一个外键?您正在寻找一个连接/关联表。这些表应该如下所示:
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)
);
因为你有n对n的关系。您需要创建一个中间表 在这种情况下,您必须为旅程表创建一个唯一的id,以便轻松标识行
CREATE TABLE TRAVELERS_IN_JOURNEY (
National_of,
Journey_id
)
由于列不能包含多个键,您还可以从旅程表中删除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
)
首先,我要了解每一种关系是什么,我要解释的是广泛使用的一些基本知识 一对一 一对一关系意味着您有两个具有关系的表,但该关系的存在方式是,表A中的任何给定行在表B中最多只能有一个匹配行 一个学生对唯一的学生有唯一的卷号,这意味着一个学生只能有一个卷号 多对多 一个好的多对多关系设计使用了一种称为联接表的东西。术语联接表只是描述第三个只包含主键的SQL表的一种奇特方式 很多学生可以有很多科目 一对多 一对多关系是一种基数类型,指两个实体a和B之间的关系,其中a的一个元素可以链接到B的多个元素,但B的一个成员只能链接到a的一个元素 例如,将A视为书籍,将B视为页面。一本书可以有很多页,但一页只能在一本书中 而在您的情况下,Travelers列将其设置为外键,即Traveler表的主键 原因:一个旅行者可以进行多次旅行。所以这里的关系是一对多的关系I关系•先决条件解释 有大量的错误信息;“理论家”和所有跟随他们的作者在“文学”中制造的虚假信息。当然,这是非常混乱的,并导致原始的,前关系的记录归档系统并没有完整性;权力以及关系系统的速度。第二,尽管新手在这里努力回答问题,但由于上述原因,他们也非常困惑 我不能提供一个教程,这不是一个简短的问题,你需要了解,然后再深入到问题的解释 1关系 我对一对多、多对一、多对多、单向、双向、多向等感到困惑
请从你的脑海中删除这些术语,它们不是关系术语(“理论家”和新手喜欢发明新事物,它们除了增加混乱之外没有其他价值)
- 关系中没有方向。它始终包括:
- 主键:被引用的对象、父端和
- a外键:引用父PK的子端
- 在SQL代码级别,DML,您可以感知到一个“方向”,即父到子或子到父。这是一个感知(而非存储)的问题,仅与代码的要求有关,即“从该数据到该数据的获取方式”