年份、单位、单位成员逻辑关系的设计
数据库设计中,年份、单位与成员的关系处理往往暗藏玄机。本文通过两种典型设计方案对比,深入剖析关联表与冗余存储的取舍逻辑,揭示数据结构如何影响业务灵活性与系统性能。从多对多关系到间接关联,每种设计背后都对应着不同的业务场景与数据完整性考量。

以年份、单位、单位成员逻辑关系设计为具体实例,用以反思三个字段逻辑关系设计不同时的数据结构等。
年份与单位/单位成员需要关联,但连接方式不同,在数据和代码处理上有所不同。
分析两种关联方式在数据库中的不同
设计方式1:年份与单位关联
(1)说明:创建单位,填写单位名称,同时选择年份。
(2)设计理解:年份-单位,单位是年份下的单位。
(3)业务猜想:有一种活动,每年活动的负责单位不确定。
(4)数据表设计:
Unit表,unit_id unit_name
Year表,year_id year_name
Unit_ Year表,unit_ year_id unit_id year_id
Member表,member_id member_name unit_year_id

(5)关联特点:
单位:届别 = 多对多(通过关联表)
成员:单位-届别 = 多对一

(6)三级关联:
单位→单位-届别→成员
(7)数据完整性:
成员必须加入一个已有年份的单位。
单位需先声明参与哪些届别,成员才能加入。
(8)存储说明:
额外存储关联表,增加存储开销。
避免了冗余存储单位。
(9)原型设计:单位必须先设置年份,成员再属于某年份下的某单位。
(10)使用建议:
单位-届别有独立属性:如届别特定的单位预算、负责人等。
数据一致性要求高:需要确保组合有效。
批量操作多:经常为单位分配届别。
历史数据重要:需要跟踪单位-届别关系变化。
设计方式2:年份与单位成员关联
(1)说明:添加成员到单位,同时选择成员年份。
(2)设计理解:单位、年份-成员,成员是单位下的成员,成员是年份下的成员。
(3)业务猜想:单位工作成员固定,每年开展活动,可以是不同单位,但单位成员变化不大。
(4)数据表设计:
Unit表,unit_id unit_name
Year表,year_id year_name
Member表,member_id member_name unit_id year_id

(5)关联特点:
成员:单位 = 多对一
成员:届别 = 多对一
单位:届别 = 间接关联(通过成员)

(6)二级关联:
成员→单位+成员
成员→年份+成员
(7)数据灵活性:
成员可以只是某单位的成员。
成员可以只是某年份的成员。
(8)存储说明:
成员表存储两个外键,数据行大,较设计1易产生冗余。
表结构简单。
(9)原型设计:成员可以分别独立设置年份或单位。
(10)使用建议:
简单快速开发:原型系统或MVP。
查询性能优先:高频查询成员信息。
单位届别关系简单:没有额外属性。
数据量小:不需要复杂优化。
本文由 @产品-子鱼 原创发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Unsplash,基于CC0协议
- 目前还没评论,等你发挥!

起点课堂会员权益




