我不知道该怎么称呼它,因为它实际上是我第一次遇到这个问题。但是我相信除了我之外的其他人都有这个问题。因此,我正在寻找一个优雅的解决方案。
我的例子:
首先是一些背景,我正在运行一个应用程序,允许用户创建像“模块”这样的Powerpoint供客户查看。
为了控制这些,我有以下两个数据库表:
模块
Table: module
Columns:
id int(11) AI PK
name varchar(75)
description text
category_id int(11)
module_type_id int(11) PK
gives_score tinyint(4)
duration varchar(70)
price varchar(45)
score_to_pass int(11)
gives_certificate int(11)
is_rtl int(11)
price_6_month varchar(45)
price_12_month varchar(45)
is_active int(11)
is_in_focus int(11)
caption text
module_component
Table: module_component
Columns:
id int(11) AI PK
text text
sound_path text
video_flv_path text
video_mp4_path text
image_path text
document_path text
sort_number int(11)
component_type_id int(11)
question_id int(11)
question_type_id int(11)
module_id int(11) PK
content_type varchar(100)
现在有时在这些模块中,我们的客户想问问题(因此表question_id
中的module_component
)
因此,为了让这里的所有数据都是question table
:
问题
Table: question
Columns:
id int(11) AI PK
question text
question_type_id int(11) PK
question_answer
Table: question_answer
Columns:
id int(11) AI PK
answer text
is_correct int(11)
question_id int(11) PK
question_question_type_id int(11) PK
现在好了解确切的问题:
问题在于,有时需要更改这些模块内容,或者拥有它们的公司都有新的更新策略,或者需要添加新的问题或视频内容。
但是,如果我们只是要更改当前模块及其组件,那么所有已经使用该模块的人都会有损坏的数据。
此外,对不同语言的需求也越来越多。
因此,我需要做下面这样的事情:
然后当有人更改模块时会发生类似情况:
现在很容易看出,在很短的时间内,很多冗余数据将保留在数据库中。 我的问题是,当提到这种规模的版本控制时,我正在提出最佳选择。或者是否有工具/方法使这样的事情变得更容易?
以上方法(我展示)基本上只是复制和粘贴每个版本。
简化数据库图表
这是一个简单的图像,显示数据库图表当前的外观(没有此问题的不必要的列)