数据库如何定义表的关系(数据库中2表之间有关系)

适用人群

MySQL数据库、java程序员、其他程序员、不甘心一直当码农

例子(发例子才是好小编)
  • 学生表

数据库如何定义表的关系(数据库中2表之间有关系)(1)

  • 成绩表

数据库如何定义表的关系(数据库中2表之间有关系)(2)

数据库中2表之间有关系,怎么设计更加优雅
  • 方式1:如上数据库中2表,通过SID这个字段去关联学生表和成绩表,这是比较常见的思路

除了这个比较常见的方案外还有更好的方案吗?

  • 方式2:创建一张关系表,叫学生成绩关系表,表里关键字段就是SID(学生主键)、CID(成绩的主键)
优缺点对比
  1. 数据量,当2张业务表数据不大的情况下,优先考虑方式1,数据量大就选择方式2
  2. 1对1、1对多、多对多,业务情况比较复杂情况,优先选择方式2,,比较固定的关系可以选择方式1.
纵表思路

业务场景:一张表有40多个属性,并且顺业务迅猛发展,字段还在不断增加。

像这种属性增长过快的场景,建议可以采用纵表设计思路。

具体设计思路
  • 一张主表、一张主表的扩展属性表
  • 学生表为主表,他的扩展表,下面多了3个属性 身高、体重、爱好。
  • 如果明天PD突然要你加个喜欢吃的食物、星座什么的属性,你不需要改表结构了,扩展非常方便

数据库如何定义表的关系(数据库中2表之间有关系)(3)

  • 对应java代码优雅设计思路,这个attr_key的值可以设计成枚举值
大字段(json格式)

业务场景:如配置表,业务发展太快,可以把具体规则以JSON格式放大字段中

为了扩展方便,经常在表中添加ext_info字段,

里面存的是json内容

注意
  • 1:如果你的扩展属性内容非常大,需要考虑设计够大的容量
  • `ext_info` mediumtext COMMENT '扩展字段',
  • 强关系,不要放大字段中,建议独立字段,如表的状态
  • 大字段的缺点和纵表的一样,不方便查询,数据量小的情况可以去like ,但数据量大就不可能了。

请谨慎选择大小

数据库如何定义表的关系(数据库中2表之间有关系)(4)

纵表缺点
  • 优点:大家都看到了比较明显,可以动态添加业务属性,不用改表结构
  • 缺点:如果PD突然要你按爱好(扩展表属性的字段去查询)页面查询需求,你就要哭了,这里代码就复杂化了,你不能一次性查询出来。需要2个步骤。
总结
  • 数据库2张表关系的建议,需要考虑业务复杂度、数据量,采用创建关系表,还是在原来表上增加字段
  • 纵表的优缺点很明显,请根据业务来考虑设计吧
  • 大字段扩展字段很方便,需要配合json来存取。
  • 动态扩展、性能、业务强关系、业务弱关系,需要自己根据经验去平衡。

数据库、程序员、设计新表注意

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页