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