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

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

一、设计总结

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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北枫_北极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值