数据库表设计:一对一、一对多、多对多

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

一、设计总结

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

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

二、各个表关系示例设计

1、一对一

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

user用户表
id age name
1 18 林某
2 20 林可爱

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用户表(对应户口)
id age name householdId
1 18 林某 000000001
2 20 林可爱 000000001
3 16 吼子 000000002

household户口表
id householdName familyMember
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用户表
id age name
1 18 林某
2 20 林可爱
hobby爱好表
id hobbyName hobbyMemberCount
1 跳舞 1
2 唱歌 2
3 溜冰 1
4 攀岩 1
user_hobby用户爱好关系表
userId hobbyId createTime
1 1 2020-11-28 10:14:00
1 2 2020-11-28 11:16:20
1 3 2020-11-28 12:12:12
2 2 2020-11-28 13:14:15
1 4 2020-11-28 14:24:00

你可能感兴趣的:(oracle,数据库)