数据库实体表间有三种对应关系:一对一、一对多、多对多。

一、设计总结

1、设计E-R图(先画出实体,再画实体间的联系)

2、根据E-R图设计表和表结构(具体根据表关系进行设计)

二、各个表关系示例设计

1、一对一

示例:每个人都有唯一的年龄和姓名

user用户表
idagename
118林某
220林可爱

2、一对多:

示例:一个人只能上一个户口本,但一个户口本可以有多个人

设计:多方添加一方的主键作为外键

a.用户表引入户口表id作为外键

b.用户表的户口表id 和 户口表的id 字段类型要一致,类型是字符的话长度也要相同

c.通过添加主外键约束,避免删除数据时造成数据混乱

SQL:

a.关键字:constraint 约束  references 参照

b.语句:alter table user add constraint household_user_fk foreign key(householdId) references household(id)

user用户表(对应户口)
idagenamehouseholdId
118林某000000001
220林可爱000000001
316吼子000000002

household户口表
idhouseholdNamefamilyMember
000000001林家2
000000002吼家1

3、多对多:

示例:一个人可以选择多个爱好,每个爱好也有不同的人选择

设计:先建表,再添加联合主键、最后添加外键约束(先后顺序不可颠倒)

a.通过用户爱好关系表建立用户表和爱好表的联系;

b.userId、hobbyId作为关系表的联合主键,确保不出现相同记录;

c.多对多表建立主外键后,要先删除约束表内容再删除主表内容。

SQL:

a.建立联合主键:alter table user_hobby add constraint user_hobby_pk PRIMARY KEY(userId,hobbyId) 

b.外键约束:

alter table user_hobby add constraint user_hobby_fk1 FOREIGN KEY(userId) references user(id)

alter table user_hobby add constraint user_hobby_fk2 FOREIGN KEY(hobbyId) references hobby(id)

user用户表
idagename
118林某
220林可爱
hobby爱好表
idhobbyNamehobbyMemberCount
1跳舞1
2唱歌2
3溜冰1
4攀岩1
user_hobby用户爱好关系表
userIdhobbyIdcreateTime
112020-11-28 10:14:00
122020-11-28 11:16:20
132020-11-28 12:12:12
222020-11-28 13:14:15
142020-11-28 14:24:00

更多推荐