Database 当我们可能需要先保存从属数据时,该怎么办

Database 当我们可能需要先保存从属数据时,该怎么办,database,database-design,Database,Database Design,在一对多关系中,处理数据的最佳方式是什么,以便用户在保存主表数据之前能够灵活地保存从属数据 保留主设备的行ID,以便I可以使用保留的主设备ID保存从设备数据 将从属数据保存在临时表中,以便在保存主数据时可以“导入”临时表中的数据 其他 票证/上传多个文件表单中的示例,其中用户可以在发送票证信息之前上传文件: 主表 主键 车票说明 从属表 主键 硕士 文件为什么不能创建主行并将其标记为不完整?为什么不能创建主行并将其标记为不完整?您的id是自动生成的吗 你有几个选择,都有可能出现问题 首先,不

在一对多关系中,处理数据的最佳方式是什么,以便用户在保存主表数据之前能够灵活地保存从属数据

  • 保留主设备的行ID,以便I可以使用保留的主设备ID保存从设备数据
  • 将从属数据保存在临时表中,以便在保存主数据时可以“导入”临时表中的数据
  • 其他
票证/上传多个文件表单中的示例,其中用户可以在发送票证信息之前上传文件:

主表 主键 车票说明

从属表 主键 硕士
文件

为什么不能创建主行并将其标记为不完整?

为什么不能创建主行并将其标记为不完整?

您的id是自动生成的吗

你有几个选择,都有可能出现问题

首先,不要定义FK关系。现在,你如何解释部分状态下的记录以及那些从未与真实记录结婚的人?当插入主记录时,您打算如何将这些记录合并

首先在主表中插入一条记录,其中除id外所有内容都为空。这使得强制执行所有必需字段默认为用户应用程序,从数据完整性的角度来看,我并不热衷于此


第三,也是最复杂但可能最安全的——使用3张表。在只包含主记录ID的表中创建主记录,并在打开表单创建新记录时将其返回给应用程序。创建与原始主表和外键表的pk/fk关系。从原始主表中删除id的自动生成,并在插入记录时从新主表中插入id。在原始FK表中插入记录时,也要插入新的主表id。至少通过这种方式,您可以在数据库中继续将所有必填字段标记为required,但关系在新表和另一个表之间,而不是原始表和另一个表之间。这不会影响查询(只要您有适当的索引),但如果您删除记录,会使事情变得更加复杂,因为如果您不小心,可能会留下一些悬而未决的问题。此外,您还必须考虑是否有其他进程(例如来自另一个源的数据导入),可能会将记录插入到主表中,当ID不再自动生成时,必须调整记录。

< P>您的ID是自动生成的吗?p> 你有几个选择,都有可能出现问题

首先,不要定义FK关系。现在,你如何解释部分状态下的记录以及那些从未与真实记录结婚的人?当插入主记录时,您打算如何将这些记录合并

首先在主表中插入一条记录,其中除id外所有内容都为空。这使得强制执行所有必需字段默认为用户应用程序,从数据完整性的角度来看,我并不热衷于此


第三,也是最复杂但可能最安全的——使用3张表。在只包含主记录ID的表中创建主记录,并在打开表单创建新记录时将其返回给应用程序。创建与原始主表和外键表的pk/fk关系。从原始主表中删除id的自动生成,并在插入记录时从新主表中插入id。在原始FK表中插入记录时,也要插入新的主表id。至少通过这种方式,您可以在数据库中继续将所有必填字段标记为required,但关系在新表和另一个表之间,而不是原始表和另一个表之间。这不会影响查询(只要您有适当的索引),但如果您删除记录,会使事情变得更加复杂,因为如果您不小心,可能会留下一些悬而未决的问题。此外,您还必须考虑是否有其他进程(如来自另一个源的数据导入),可能会将记录插入到主表中,当ID不再自动生成时,必须调整记录。

< P>在上传的情况下,您将不得不为未提交的上传创建临时存储。这样,一旦开始上传,您就可以将所有新文件保存在一个单独的表中。一旦用户准备好提交票证,您就可以保存票证并从临时表中追加文件

如果可能的话,您还可以使用主表中的某个固定id创建假记录。然后,您必须确保假记录不会出现在其他地方的查询中


第三,您可以创建存储过程,它将为主表和增量标识计数器生成id。若用户中止操作,则保留id不会影响任何内容。这就像创建主记录然后删除它一样。您也可以在主表中创建临时记录。

在上载的情况下,您必须为未提交的上载创建临时存储。这样,一旦开始上传,您就可以将所有新文件保存在一个单独的表中。一旦用户准备好提交票证,您就可以保存票证并从临时表中追加文件

如果可能的话,您还可以使用主表中的某个固定id创建假记录。然后,您必须确保假记录不会出现在其他地方的查询中

第三,您可以创建存储过程,它将为主表和增量标识计数器生成id。若用户中止操作,则保留id不会影响任何内容。这就像创建主记录然后删除它一样。您还可以在主表中创建临时记录。

在Oracle中(可能是其他的?),您可以将约束的验证推迟到提交时

因此可以先插入子行。(显然,您需要父密钥。)

在Oracle中(可能是其他的?)您可以