从数据库中删除记录时的最佳做法是什么?
例如,如果您有这个在线预订旅游应用程序。
您有一个要删除记录的游览表,但游览表还链接到预订表和客户表。现在应该允许删除记录,还是应该有一个像标志这样的字段,比如存档等。
什么是最佳实践?
问候,茶。
从数据库中删除记录时的最佳做法是什么?
例如,如果您有这个在线预订旅游应用程序。
您有一个要删除记录的游览表,但游览表还链接到预订表和客户表。现在应该允许删除记录,还是应该有一个像标志这样的字段,比如存档等。
什么是最佳实践?
问候,茶。
正如 Branko 所说,这取决于您的要求(和您的数据库布局)。
如果您想保留完整的历史记录,您可能不会删除太多。只是设置一个取消的标志可能是最好的。
就您的示例数据库设计而言,我想说旅游应该与预订相关联,而不是与客户相关(预订应该提供旅游到客户的多对多映射)。
以您的示例为基础,您可能不应该被允许删除在任何旅行中预订的客户(或者也需要删除预订)。删除旅行时,需要删除该旅行的所有预订(并且您可能需要在删除预订(或旅行)时触发以通知客户他们的预订已被取消,或者此触发器可以在外部处理数据库)。
正如您可能从上面看到的那样,没有具体的规则,您需要从逻辑上考虑您的特定数据库设计应该或不应该允许什么以及删除某些内容时需要发生什么。
对于外键,默认设置为 ON DELETE NO ACTION,这是最安全的设置。不言而喻,您不应该随意使用 ON DELETE CASCADE 或一些非默认设置,而无需专门考虑该设置的每个实例以及使用该设置是否合理。
理想情况下,您还总是需要以这样一种方式设计您的数据库,即如果有人接管它,就很难意外删除错误的东西,因为这个人不知道使用数据库的确切技巧(例如事情需要按什么顺序完成)。为您的外键设置更严格或更安全的设置会使这种情况发生更加困难。