mysql - 数据库设计 : Managing old and new data in database table

标签 mysql sql-server oracle postgresql database-design

我有一个表 Student,其字段如下,

学生表(每个学生一条记录)

student_id
Name 
Parent_Name
Address_line1, Address_line2, Addess_line
Photo_path
Signature_file_path
Preferred_examcity_choice1,Preferred_examcity_choice1, Preferred_examcity_choice3
Gender
Nationality
.
.
.

我正在通过 Web 界面将注册表单填写插入到此表中。

现在 Web 界面中有一个用于更新学生数据的模块,在每次更新请求时,我都会更新 student 表记录并在 student_data_change_request 中插入新条目>。学生可以多次更改记录。

student_data_change_request

request_id(auto_incr PK)
old_name
new_name
old_photo_path
new_photo_path
old_signature_file_path
new_signature_file_path

现在问题来了,早期的学生被允许更改很少的字段,现在客户希望允许候选人更新更多的字段(大约 20 个字段)并添加 old相应列的新 列不是优雅和首选(我猜),我最终将创建 40 列来跟踪 20 列。那么我应该如何重新设计我的 table 呢?欢迎提出建议。

最佳答案

一种方法是创建一个名为 (table)_xx 的影子表,它具有相同的列、时间、日期、更新/插入/删除标志、用户或其他任何内容,并且没有引用完整性。设置触发器以在发生任何事情时从源更新该表。

如果您有需要历史记录的真正业务需求,那么请正确执行这些操作,但此模式非常适合用作一般审计、调试和取证工具。

自动化/脚本化也非常容易,因为您只需从数据库元数据生成它。

关于mysql - 数据库设计 : Managing old and new data in database table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39894387/

相关文章:

php - 如何将新项目文件夹连接到现有 MAMP 数据库?

sql-server - 使用存储过程进行计算

oracle - PL/SQL发生错误时退出执行

java - 如何从 Oracle 表中获取所有列的名称

oracle - 带有变量帮助的 PLSQL select 语句

php - 如何使用 Mysql PHP 函数从 Mysql 数据库中获取前 2 或 3 行?

android - 相关对象中带有 LIKE 子句的 GreenDao 查询

php - 检查mysql结果为空

sql - SQL Server中存在重复行时如何选择具有最大值的行

sql - 将查询变量传递给MSDB.dbo.sp_Send_DBMail