|NO.Z.00049|——————————|BigDataEnd|——|Java&MySQL多表/外键/数据库设计.V07|——|MySQL.v07|一对一关系|设计省市:一对多关系|设计演员与角色表:多对多关系|

一、一对一关系
### --- 一对一关系

——>        [一对一关系介绍]——[设计省市:一对多关系]——[设计演员与角色表:多对多关系]
### --- 一对一(1:1)
——>        在实际的开发中应用不多.因为一对一可以创建成一张表。

### --- 一对一建表原则
——>        外键唯一 主表的主键和从表的外键(唯一),形成主外键关系,外键唯一 UNIQUE
二、设计 省&市表
### --- 设计 省&市表

——>       分析: 省和市之间的关系是 一对多关系,一个省包含多个市
### --- SQL是实现

~~~     # 创建省表 (主表,注意: 一定要添加主键约束)
CREATE TABLE province(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    description VARCHAR(20)
);
~~~     # 创建市表 (从表,注意: 外键类型一定要与主表主键一致)

CREATE TABLE city(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    description VARCHAR(20),
    pid INT,
    -- 添加外键约束
    CONSTRAINT pro_city_fk FOREIGN KEY (pid) REFERENCES province(id)
);
### --- 查看表关系
四、设计演员与角色表
### --- 设计演员与角色表

~~~     分析: 演员与角色 是多对多关系, 一个演员可以饰演多个角色, 
~~~     一个角色同样可以被不同的演员扮演
### --- SQL 实现

~~~     # 创建演员表
CREATE TABLE actor(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)
);
~~~     # 创建角色表

CREATE TABLE role(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)
);
~~~     # 创建中间表

CREATE TABLE actor_role(
    -- 中间表自己的主键
    id INT PRIMARY KEY AUTO_INCREMENT,
    -- 指向actor 表的外键
    aid INT,
    -- 指向role 表的外键
    rid INT
);
### --- 添加外键约束

-- 为中间表的aid字段,添加外键约束 指向演员表的主键
ALTER TABLE actor_role ADD FOREIGN KEY(aid) REFERENCES actor(id);
-- 为中间表的rid字段, 添加外键约束 指向角色表的主键
ALTER TABLE actor_role ADD FOREIGN KEY(rid) REFERENCES role(id);
~~~     # 查看表关系
四、sql语句
### --- sql语句

~~~     # 创建省表 (主表,注意: 一定要添加主键约束)
CREATE TABLE province(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    description VARCHAR(20)
);
~~~     # 创建市表 (从表,注意: 外键类型一定要与主表主键一致)

CREATE TABLE city(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    description VARCHAR(20),
    pid INT,
    -- 添加外键约束
    CONSTRAINT pro_city_fk FOREIGN KEY (pid) REFERENCES province(id)
);
~~~     # 创建演员表

CREATE TABLE actor(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)
);
~~~     # 创建角色表

CREATE TABLE role(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)
);
~~~     # 创建中间表

CREATE TABLE actor_role(
    -- 中间表自己的主键
    id INT PRIMARY KEY AUTO_INCREMENT,
    -- 指向actor 表的外键
    aid INT,
    -- 指向role 表的外键
    rid INT
);

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(21)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示