mysql 变种_MySQL(外键变种)

day58

外键的变种

a. 用户表和部门表

用户:        不唯一

1 alex     1

2 root       1

3 egon       2

4 laoyao   3

部门:

1 服务

2 保安

3 公关

~~~~~~~一对多    (不同用户可以属于同一个部门)

b. 用户表和博客表

用户表:

1 alex

2 root

3 egon

4 laoyao

博客表:

FK() + 唯一使用上节的唯一索引方式 (如身份证)

1   /yuanchenqi/   4

2    /alex3714/      1

3    /asdfasdf/       3

4    /ffffffff/              2

~~~~~~~~~一对一   一个博客对应于一个用户

20181113004522283125.png

以上形式可以只给部分用户设置密码,而且不会产生多余空格,减少空间占用。

多对多形式

c. 用户表(百合网) 相亲记录表

示例1:

用户表

相亲表

示例2:

用户表

主机表

用户主机关系表

~~~~~~~~~~~~~~~~~~多对多

create table userinfo2(

id int auto_increment primary key,

name char(10),

gender char(10),

email varchar(64)

)engine=innodb default charset=utf8;

create table host(

id int auto_increment primary key,

hostname char(64)

)engine=innodb default charset=utf8;

create table user2host(

id int auto_increment primary key,

userid int not null,

hostid int not null,

unique uq_user_host (userid,hostid),

CONSTRAINT fk_u2h_user FOREIGN key (userid) REFERENCES userinfo2(id),

CONSTRAINT fk_u2h_host FOREIGN key (hostid) REFERENCES host(id)

)engine=innodb default charset=utf8;

id 1号可以管理1,2,3号主机

20181113004522486250.png

不用以上这种形式,而是下表形式,再建一个表。

20181113004522682539.png

user,和host_id可以使用联合唯一索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值