从数据库获取新行ID的最佳实践

时间:2016-05-01 15:20:48

标签: database web-applications relational-database

我正在创建一个项目,其中我实际上有 3个相关表格 连接到一个表,如下所示

表1

id
name

表2

id
tb1_id
random_thing

表3

id
tb1_id
random_thing

我基本上不能选择一个选项,我可以先在table1中创建一行,然后再在tb2,tb3 中创建一行。客户希望在单个按钮上完成所有事情。因此,无论何时调用页面,我都会创建一个新的空白行,然后获取新的tb1_id然后链接所有内容并使用单个按钮,但问题是我可以删除未使用的行比如2-3天,但是那太荒谬了那么还有其他最佳做法来克服这种情况吗?

修改

使用示例进行说明将非常有用,我很高兴能够使用任何数据库或任何语言,只需要做好示例,这样我就能理解它是如何完成的。抱歉,我是其中之一那些讨厌理论和热爱实践的人:d

1 个答案:

答案 0 :(得分:0)

最佳做法是使用显式外键关系和事务。

所以,基本的想法是:

  1. 开始交易。
  2. 在表1中插入一行名称为
  3. 的行
  4. 获取新创建的行的ID,理想情况下使用returningoutput子句(取决于数据库)。
  5. 在表2中插入一行。
  6. 在表3中插入一行。
  7. 提交交易。
  8. 使用事务时,如果因任何原因未完成事务,请小心回滚事务。

    至于删除行,你可以进行"级联删除"外键定义的选项,因此如果删除父行,则相关行也将被删除。

    某些数据库(特别是Postgres)提供了一些功能,您可以使用修改数据的CTE将所有这些功能放入单个语句中。这个想法仍然相同,只是更容易编码。

    我应该注意到有完全合理的选择。例如,您可以在"数据"上创建一个视图。三个表的列,并在视图上创建插入/更新/删除触发器。就个人而言,我发现在触发器中隐藏此功能会使其更难以理解和维护。我认为这是一种个人观点,这也是一种合理的方法。