sql - 两个使用可为空字段相互引用的 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)
解决方案
推荐阅读
- c# - C# WEB 服务器下载帮助 C#
- npm - 永远安装 npm 和 mechanic 时出错
- gremlin - 如何使用 SSL 证书在 CloudFoundry 上使用 Gremlin.NET 连接到 Janusgraph
- javascript - JavaScript 异步函数问题
- r - 计算具有x个“条件”的人在R中具有相同条件的概率?
- android - Firebase 存储 - 运行 android 应用程序的问题
- node.js - 在路由别名上获取 404
- java - Spring Boot Admin 2.0.0:客户端无法连接到安全服务器
- node.js - elementIsNotVisible 在 Selenium 中抛出 noSuchElementError
- url - 生成 mpd 视频的 URL