数据库如何定义表的关系(数据库中2表之间有关系)
适用人群
MySQL数据库、java程序员、其他程序员、不甘心一直当码农
例子(发例子才是好小编)- 学生表
- 成绩表
数据库中2表之间有关系,怎么设计更加优雅
- 方式1:如上数据库中2表,通过SID这个字段去关联学生表和成绩表,这是比较常见的思路
除了这个比较常见的方案外还有更好的方案吗?
- 方式2:创建一张关系表,叫学生成绩关系表,表里关键字段就是SID(学生主键)、CID(成绩的主键)
- 数据量,当2张业务表数据不大的情况下,优先考虑方式1,数据量大就选择方式2
- 1对1、1对多、多对多,业务情况比较复杂情况,优先选择方式2,,比较固定的关系可以选择方式1.
业务场景:一张表有40多个属性,并且顺业务迅猛发展,字段还在不断增加。
像这种属性增长过快的场景,建议可以采用纵表设计思路。
具体设计思路- 一张主表、一张主表的扩展属性表
- 学生表为主表,他的扩展表,下面多了3个属性 身高、体重、爱好。
- 如果明天PD突然要你加个喜欢吃的食物、星座什么的属性,你不需要改表结构了,扩展非常方便
- 对应java代码优雅设计思路,这个attr_key的值可以设计成枚举值
业务场景:如配置表,业务发展太快,可以把具体规则以JSON格式放大字段中
为了扩展方便,经常在表中添加ext_info字段,
里面存的是json内容
注意- 1:如果你的扩展属性内容非常大,需要考虑设计够大的容量
- `ext_info` mediumtext COMMENT '扩展字段',
- 强关系,不要放大字段中,建议独立字段,如表的状态
- 大字段的缺点和纵表的一样,不方便查询,数据量小的情况可以去like ,但数据量大就不可能了。
请谨慎选择大小
纵表缺点
- 优点:大家都看到了比较明显,可以动态添加业务属性,不用改表结构
- 缺点:如果PD突然要你按爱好(扩展表属性的字段去查询)页面查询需求,你就要哭了,这里代码就复杂化了,你不能一次性查询出来。需要2个步骤。
- 数据库2张表关系的建议,需要考虑业务复杂度、数据量,采用创建关系表,还是在原来表上增加字段
- 纵表的优缺点很明显,请根据业务来考虑设计吧
- 大字段扩展字段很方便,需要配合json来存取。
- 动态扩展、性能、业务强关系、业务弱关系,需要自己根据经验去平衡。
数据库、程序员、设计新表注意
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com