Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在关系模型中存储不完整数据的最佳方法?_Sql Server_Entity Framework_Database Design_Orm - Fatal编程技术网

Sql server 在关系模型中存储不完整数据的最佳方法?

Sql server 在关系模型中存储不完整数据的最佳方法?,sql-server,entity-framework,database-design,orm,Sql Server,Entity Framework,Database Design,Orm,我正在编写一个web应用程序,它从一系列表单(想想“向导”)中获取用户输入,并随着用户的进步将其存储在SQL数据库中 假设他们代表一家有地址的公司提交申请表。申请表中还将列出支持信息 因此,简化模式将有4个表(请注意,每个表将有大量其他字段要捕获): 用户首先启动申请表,在几个屏幕上填写一些重要的详细信息,然后添加公司详细信息,然后添加公司地址,最后添加支持信息列表 鉴于我不能在一次插入中创建整个数据模型,我如何在用户浏览网页时保存他们的输入 当我保存应用程序表单时,我将有FK冲突,因为没有公司

我正在编写一个web应用程序,它从一系列表单(想想“向导”)中获取用户输入,并随着用户的进步将其存储在SQL数据库中

假设他们代表一家有地址的公司提交申请表。申请表中还将列出支持信息

因此,简化模式将有4个表(请注意,每个表将有大量其他字段要捕获):

用户首先启动申请表,在几个屏幕上填写一些重要的详细信息,然后添加公司详细信息,然后添加公司地址,最后添加支持信息列表

鉴于我不能在一次插入中创建整个数据模型,我如何在用户浏览网页时保存他们的输入

当我保存应用程序表单时,我将有FK冲突,因为没有公司。当我创建公司时,我将有一个FK冲突,因为地址只会在以后保存。(支持信息没有此问题,因为它具有多对一关系,并且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