我正在创建一个项目,其中我实际上有 3个相关表格 连接到一个表,如下所示
表1
id
name
表2
id
tb1_id
random_thing
表3
id
tb1_id
random_thing
我基本上不能选择一个选项,我可以先在table1中创建一行,然后再在tb2,tb3 中创建一行。客户希望在单个按钮上完成所有事情。因此,无论何时调用页面,我都会创建一个新的空白行,然后获取新的tb1_id然后链接所有内容并使用单个按钮,但问题是我可以删除未使用的行比如2-3天,但是那太荒谬了那么还有其他最佳做法来克服这种情况吗?
修改
使用示例进行说明将非常有用,我很高兴能够使用任何数据库或任何语言,只需要做好示例,这样我就能理解它是如何完成的。抱歉,我是其中之一那些讨厌理论和热爱实践的人:d
答案 0 :(得分:0)
最佳做法是使用显式外键关系和事务。
所以,基本的想法是:
returning
或output
子句(取决于数据库)。使用事务时,如果因任何原因未完成事务,请小心回滚事务。
至于删除行,你可以进行"级联删除"外键定义的选项,因此如果删除父行,则相关行也将被删除。
某些数据库(特别是Postgres)提供了一些功能,您可以使用修改数据的CTE将所有这些功能放入单个语句中。这个想法仍然相同,只是更容易编码。
我应该注意到有完全合理的选择。例如,您可以在"数据"上创建一个视图。三个表的列,并在视图上创建插入/更新/删除触发器。就个人而言,我发现在触发器中隐藏此功能会使其更难以理解和维护。我认为这是一种个人观点,这也是一种合理的方法。