首页 > 解决方案 > 两个使用可为空字段相互引用的 sql 表:陷阱?

问题描述

在当前系统中,我们跟踪组织的设备。另一个组织也想使用该系统,因此我们为他们设计了一个小的子区域来存储他们的设备(在他们使用 Excel 文档之前)。该组织的数据结构与第一个组织不同。

现在,两个组织都希望能够将项目转换为另一个组织,然后能够来回转移所有权。

我在引用另一个项目的两个设备表中添加了一个可为空的 FK。所以在实践中,当它转换过来时,它会指向对面的等价项,反之亦然。1:0,1 风格。

一位同事提到这会导致问题,但除了循环关系类型的问题之外,我找不到任何我能想到的问题?由于两个 FK 字段都可以为空,所以不会有鸡蛋问题,会吗?或者我应该将其更改为连接表来容纳这种关系。

最终,一旦大多数数据都被“转换”了,我们计划将其合并为仅 1 个表。下面的代码只是表格布局。如果我们启动一个新数据库,问题会是最初创建表吗?我在 alter table 语句中添加了 FK,表本身已经创建。不是每件设备都会被转换过来。

为什么我不写一些东西来将表b数据转换为表a?因为他们拥有的数据非常混乱,而且他们不跟踪表 a 所拥有的必需的东西。因此,为什么我在应用程序上创建了一个函数来帮助他们转换项目。

    create table table1 (
      column1 int primary key not null,
      ...
      columnX int null,
          
        );
    
    create table table2 (
      column1 int primary key not null,
      ...
      columnX int null
   );

   alter table... constraint fk1
            foreign key (columnX)
            references table2 (column1)

   alter table... constraint fk2
        foreign key (columnX)
        references table1 (column1)

标签: sqlasp.net-mvcdatabaseentity-framework

解决方案


推荐阅读