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
~~~~~~~~~一对一 一个博客对应于一个用户
以上形式可以只给部分用户设置密码,而且不会产生多余空格,减少空间占用。
多对多形式
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号主机
不用以上这种形式,而是下表形式,再建一个表。
user,和host_id可以使用联合唯一索引。