我发现很难找到一个好的标题,我希望我能更好地解释它。 我有两个表当候选键不存在时,用外键添加新行
"car" - id, car_id, name
"car_pictures" - id, fk_car_id, url
显然,一个“车”能有几张照片是那些通过在“car_pictures”表保存为“fk_car_id”的car_id链接。 工作流程的前端可能是:
- you add a new car to the database
- you add pictures to this car entry
如果遵循这样您第一次在“车”表中的新条目。然后,您可以在“car_pictures”表中引用“car_id”。
但是,如果你想改变工作流程是这样的:
- you add a new car
- you immediately add pictures
- you save the new car to the database
如果遵循这样,您就创建数据库条目仅当用户已经完成了所有“台阶”。但是,如果您想将照片添加到汽车中,那么它还没有“car_id”。所以你不能引用id。
如果添加汽车和添加图片是两个独立的api调用,例如通常的做法是什么。
看来我需要澄清我在做什么。 假设我有两个API调用: www.domain.com/api/car/add/?name=newcar - >用于添加汽车(即添加到数据库) www.domain.com/api/car/picture/add /?car_id = x - >用于将图片添加到汽车(即处理上载并将数据存入数据库)
前端看起来像这样: 带有全部表格的页面您可以在其他页面上编辑和添加新照片。另一个页面添加一个新的车也有可能添加图片。这与编辑汽车的页面/形式相同,只是没有car_id可用。
编辑:
我自己能想到的几种方法来处理这种情况。
第一:当用户打开“添加新车”表单时立即为汽车创建数据库条目。这样你总是有一个car_id。但如果用户决定取消添加汽车并需要删除这些“虚拟”数据库条目,则必须处理。如果出现问题,您可能会以数据库中的大量空车入场结束。也许该行有一个标志,当汽车实际上被用户“插入”时该标志被设置。
第二种:插入具有临时否定fk_car_id的新图片,并在数据库中创建行时使用实际的car_id更新这些行。
第三:在没有car_id的情况下,将新照片保存到带有临时ID的临时表中。那么您必须返回该临时ID并在创建数据库中的汽车入口时从临时表中移动这些条目。
但这些想法听起来很复杂,我希望有一些最佳实践方式如何做到这一点。也许问题出在我的工作流程中,并且有更好的方法来做到这一点。然而,分开添加汽车和将图片添加到数据库的过程似乎是一个好主意。
是否有可能为你使用存储过程和/或交易?用这种方法你可以做第一次插入,得到id,然后做第二次插入。如果出现问题,则不会写入数据库。 – GarethL 2013-02-27 17:11:35
为什么你需要car_id在“car”表中? “car”.id链接到fk_car_id – apoq 2013-02-27 17:13:12
我无法使用事务,因为添加图片是一个单独的脚本调用。 – DarsVaeda 2013-02-27 17:14:37