从一个文件中在db中进行多次插入的最佳策略

时间:2013-08-10 17:08:03

标签: database database-design relational-database

让我澄清问题的标题。

我正在实现一个Web应用程序的后端。

这是我想在一个.html文件

中创建的内容
  • 用户在地图上插入点,线或多边形。
  • 用户填写包含文本数据的表单。这些数据是相对的 她在地图上插入的几何图形。
  • 用户通过html5 websockets / drag'n'drop上传照片和视频。 这些也与她在地图上插入的几何图形有关。

页面底部只有一个名为“全部保存”的按钮,可以将所有这些数据一次保存在数据库中(插入)。

问题?我在数据库中有两个单独的表。一个名为“pins”,将获取几何数据和表单数据。

另一个名为“多媒体”,将获取图像/视频。

现在“多媒体”有一个名为“multipin”的列,其中包含“引脚”ID,因此我可以将引脚和多媒体联系起来。

所有列包含ID都是“SERIAL”(每次插入时,id会自动增加+1)。

我在想,如果我同时进行两次插入操作,我就无法获得新的“引脚”ID并将其插入“多媒体”的“multipin”列。我必须等待创建新的“pins”id,然后将其插入“multipin”。

那么,两次插入(?) 我提出的解决方案是创建三个html文件。首先,用户插入几何和表单数据。点击名为“点击此处添加多媒体”的按钮。现在,此按钮将数据发送到另一个插入“pins”的文件并获取新的id。重定向到第三个文件,并发送新的“引脚”。所以现在用户可以插入照片/视频,代码知道“引脚”id,所以可以把它放在“multipin”中。

听起来不错吗?有更好的方法或策略吗?

对于“一次保存所有”版本我正在考虑websockets ...对于“3个文件版本”?我应该只为多媒体使用“传统”ajax和websockets吗?

我为这个大问题道歉。我的英语(不是我的母语)

感谢您的时间

斯莱文

1 个答案:

答案 0 :(得分:0)

一次保存对用户来说是一个更好的策略。

假设您正在使用事务性关系数据库,则可以通过以下方式保存所有内容。

  • 插入您的图钉表数据。

  • 提交

  • 获取引脚顺序ID

  • 插入多媒体

  • 提交

如果多媒体有任何问题,您可以回滚多媒体插页并删除引脚表数据行以保持数据库的一致性。