Sql server 在关系模型中存储不完整数据的最佳方法?
我正在编写一个web应用程序,它从一系列表单(想想“向导”)中获取用户输入,并随着用户的进步将其存储在SQL数据库中 假设他们代表一家有地址的公司提交申请表。申请表中还将列出支持信息 因此,简化模式将有4个表(请注意,每个表将有大量其他字段要捕获): 用户首先启动申请表,在几个屏幕上填写一些重要的详细信息,然后添加公司详细信息,然后添加公司地址,最后添加支持信息列表 鉴于我不能在一次插入中创建整个数据模型,我如何在用户浏览网页时保存他们的输入 当我保存应用程序表单时,我将有FK冲突,因为没有公司。当我创建公司时,我将有一个FK冲突,因为地址只会在以后保存。(支持信息没有此问题,因为它具有多对一关系,并且FK始终有效。) 我想到了以下几点:Sql server 在关系模型中存储不完整数据的最佳方法?,sql-server,entity-framework,database-design,orm,Sql Server,Entity Framework,Database Design,Orm,我正在编写一个web应用程序,它从一系列表单(想想“向导”)中获取用户输入,并随着用户的进步将其存储在SQL数据库中 假设他们代表一家有地址的公司提交申请表。申请表中还将列出支持信息 因此,简化模式将有4个表(请注意,每个表将有大量其他字段要捕获): 用户首先启动申请表,在几个屏幕上填写一些重要的详细信息,然后添加公司详细信息,然后添加公司地址,最后添加支持信息列表 鉴于我不能在一次插入中创建整个数据模型,我如何在用户浏览网页时保存他们的输入 当我保存应用程序表单时,我将有FK冲突,因为没有公司
- 我是否禁用约束检查李>
- 还是允许FKs为空
- 或者在相关表中创建“虚拟”条目,直到用户输入其详细信息
- 或创建单独的数据模型(数据输入和持久性)
- 或者将“进行中”数据保存为JSON或XML
我正在使用实体框架和SQL Server,如果这对答案有任何影响的话。(我意识到NoSQL可能是一个建议,但我不能更改数据库。)两件事-1。如果输入的是已存在公司的申请,您是否允许选择现有公司?如果您打算再次创建一家新公司,那么您的模型存在缺陷,不需要外键。地址也一样。2.您可以使用仅具有自动递增主键的代理表或代理表,然后将其用作公司和地址表中的主键。可以使用
insert CompanyProxy默认值插入这些代理表,并在事务中获取scope\u identity()
,将其用作外键。每个用户输入的数据不太可能共享。但是共享数据是使用外键的必要条件吗?我认为它们也表达了表之间关系的本质。我首先使用的是实体框架代码,所以可能无法实现这个想法。我很感激你的建议,明天我会研究一下如何应用。你可以让你的FK列为空。一个更通用的解决方案是将关系移动到一个单独的表中,例如CompanyAddress(CompanyId,AddressId)
,在创建地址后可以在其中记录关联。
**ApplicationForm**
Id: PK
CompanyId: FK
**Company**
Id: PK
Address: FK
**Address**
Id: PK
**SupportingInfo**
Id: PK
ApplicationFormId: FK