0前言
摘自某一段记事:
在实际的开发中,必然遇到“编辑操作”,而编辑操作,看似简单,实则其影响面甚广。本着设计的“贯穿性”和逻辑一致性,本文将按照,创建基础表的字段建议,创建关联表的字段建议,进行阐述。
1. 建表
1.1 创建基础表
基础表除了常规的字段以外,需要额外添加以下字段。
序号 | 数据库字段 | 注释 | 备注 |
---|---|---|---|
1 | creator_id | 创建人ID | |
2 | create_date | 创建日期 | |
3 | create_depment | 创建部门 | 即创建人所属的部门 |
4 | create_be_depment | 归属部门 | 即数据的部门 |
5 | edit_id | 编辑人ID | |
6 | edit_date | 编辑日期 | |
7 | edit_depment | 编辑部门 | 即编辑人所属的部门 |
8 | edit_be_depment | 归属部门 | 即数据的部门 |
9 | order_no | 排序 |
1.2 创建基础表的编辑记录表
编辑记录表是指在保留原表的信息之上,额外添加字段,以保留编辑的各个字段的修改记录。
序号 | 数据库字段 | 注释 | 备注 |
---|---|---|---|
10 | old_id | 旧的id | 即基础表的id |
11 | versions | 版本号 |
1.3 创建业务表
业务表是指,和基础数据有关联的业务表。此处以(1:m)一对多举例。基础表是学校信息表,业务表是学生表。一个学校有多个学生。
学生业务表:
序号 | 数据库字段 | 注释 | 备注 |
---|---|---|---|
1 | id | 学生id | |
2 | name | 学生姓名 | |
… | … | … | 此处是更多的属性 |
n | school_id | 学校id | 学校基础表的id,或者学校基础表的编辑记录表的old_id |
n+1 | school_versions | 学校记录表的版本号 | 学校基础表的编辑记录表的版本号 |
n+2 | school_status_flag | 更新标记 | 当学校基础表更新后, 是否需要更新school_id_versions的版本号 |
n+3 | school_status_expiring_date | 更新标记有效期 | 更新标记的有效期。根据实际情况设置。默认是长期 |
… | … | … | … |
此处,仅列举了一个外键的情况,如果有其他的外键,还需要根据外键的数量,来增加(外键_id,外键_versions,外键_status_flag,外键_status_expiring_date)属性字段。
2. E-R图示例
回到最开始的问题,学生从入学之日(2020-09-01)起,school_status_flag的值是1,
school_status_expiring_date的值是(2024-07-01)。在学生未毕业之前,每次编辑学校基础表,通过切面编程的方式,编辑学生基础表的school_versions的值;当学生毕业后,school_status_flag=0,school_versions的值也将定格,不再随着学校基础信息的编辑而发生变动。
3. 结束语
此处,仅是阐述了一种数据库设计的一种办法。实际编码过程中遇到的问题可能更加复杂,需要根据实际情况及时进行调整。