Sql server 2008 从数据库中删除记录时的最佳做法

Sql server 2008 从数据库中删除记录时的最佳做法,sql-server-2008,database-design,Sql Server 2008,Database Design,从数据库中删除记录的最佳做法是什么 例如,如果您有此在线预订旅游应用程序 您有一个包含要删除记录的tour表,但tour表还链接到booking表和customer表。现在应该允许删除该记录,还是应该有一个类似于标志的字段,上面写着archive,等等 什么是最佳实践 问候,, 茶。正如布兰科所说,这取决于您的需求(以及您的数据库布局) 如果你想保留完整的历史记录,你可能不会删除太多。仅仅设置一个取消的标志可能是最好的 就您的示例数据库设计而言,我认为旅游应该链接到预订,而不是客户(预订应该提供

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

例如,如果您有此在线预订旅游应用程序

您有一个包含要删除记录的tour表,但tour表还链接到booking表和customer表。现在应该允许删除该记录,还是应该有一个类似于标志的字段,上面写着archive,等等

什么是最佳实践

问候,,
茶。

正如布兰科所说,这取决于您的需求(以及您的数据库布局)

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

就您的示例数据库设计而言,我认为旅游应该链接到预订,而不是客户(预订应该提供旅游到客户的多对多映射)

以您的示例为基础,您可能不应该被允许删除在任何旅游中预订的客户(或者预订也需要删除)。删除旅游时,需要删除该旅游的所有预订(您可能需要在删除预订(或旅游)时触发,以通知客户其预订已取消,或者可以在数据库之外处理此触发)

正如您可能从上面看到的,没有具体的规则,您需要从逻辑上考虑您的特定数据库设计应该或不应该允许什么,以及删除某些内容时需要发生什么

默认设置为“不删除外键操作”,这是最安全的设置。不用说,您不应该在没有具体考虑该设置的每个实例以及使用该设置是否合理的情况下,自由使用ON DELETE CASCADE或一些非默认设置


理想情况下,您还需要以这样的方式设计数据库:如果有人接管数据库,则很难意外删除错误的内容,因为此人不知道使用数据库的确切技巧(例如,哪些事情需要按什么顺序完成)。对外键进行更严格或更安全的设置会使这种情况更加困难。

取决于您的要求。也许一个简单的ON-DELETE级联(或设置为NULL)可以满足您的需要?