2012-11-26 65 views
0

从数据库中删除记录时的最佳做法是什么?从数据库中删除记录时的最佳做法

例如,如果你有这个在线预订旅游应用程序。

你必须要除去用一记游表,但表游也链接到预订表和客户表。现在应该记录被允许被删除,或者应该有这样说的存档标志字段等

什么是最佳做法?

问候, 茶。

+1

取决于您的要求。也许一个简单的ON DELETE CASCADE(或SET NULL)将满足您的需求? –

回答

1

Branko说,这取决于您的要求(和您的数据库布局)。

如果你想保留一个完整的历史,你可能不会删除太多。只要设置一个取消标志可能是最好的。

就在您的示例数据库设计方面,我要说旅游应与订票,而不是客户(预订应提供游览的客户多到多对多映射)。

要建立在你的榜样,你可能不应该被允许删除的任何旅游预订的客户(或预订需要也被删除)。删除导览时,需要删除该导览的所有预订(并且您可能需要触发删除预订(或导览)以通知客户他们的预订已被取消,或者此触发可以在数据库)。

正如你可能会从上面看到的,有没有具体的规则,则需要逻辑思考什么应该或不应该允许特定的数据库设计和需要什么东西时,被删除的情况发生。

对于外键(这是最安全的设置),缺省值为ON DELETE NO ACTION。不用说,你不应该自由地使用ON DELETE CASCADE或一些非默认设置,而不必特别考虑该设置的每个实例以及是否使用该设置是合理的。

你也总是非常需要这样的方式,如果有人抢过来,就很难不小心删除了错误的事情,因为这个人不知道使用的精确的技巧,设计数据库数据库(例如哪些事情需要以什么顺序完成)。对外键的更严格或更安全的设置会使这种情况更加困难。