我确实意识到我绝对不是第一个处理这个问题的人,但我有一些背景,我无法找到令人满意的答案。
我在T
MySQL触发器(包括ON DELETE),x
PHP脚本和y
视图2
和{{1}中使用了一个表VT
(VT2
前缀是我的命名约定)。说到应用程序,可以预期新的功能需求会逐渐出现,因此V
的结构仍然存在。
现在,在应用程序中,我需要(另外)实现T
行的归档(删除它们,但备份)。
有两种解决方案:
1)添加一个布尔列T
并创建一个类似于archived
的视图,并将所有VCurrentT
次出现的x+y+z+2
替换为T
。< / p>
2)创建一个备份表VCurrentT
(与T'
相同的实体)并扩展T
中的ON DELETE触发器。
现在的利弊:
ad 1)我发现它更优雅和正确,但是会有一个显着的重写部分(可能的错误来源)。此外,我怀疑视图命名的正确性(T
派生自VT
) - 可能应重命名VCurrentT
和VT
视图 - 甚至更多重写!
ad 2)它更容易实现,并且可能更快(表中没有更多使用的归档行),但我发现它不优雅。我们需要维护两个表。
你觉得哪个更好?