在不使用唯一或键列的情况下定义两个 SQL 服务器表(parent 到 child 列)之间的关系
Define a relationship between two SQL Server tables (parent to child column) without the use of unique or key columns
我正在尝试构建一个 table,它将容纳 parent table 和 child table 的 'relationship'。但是,table 中的每一列都没有键或唯一,并且每列中都有重复值。
例子
Table A - Parent(事实)
**CartNumber**
Table B - Child
**CartNumber** not unique
CartValue
CartNumber
从 table A link 到 B 中的 CartNumber
我曾尝试使用 NOCHECK 实现外键,但当然这行不通,因为 child 列不是主键或唯一键。请记住,我只是想定义两个 columns/tables 之间有一个 link。有没有办法定义两列之间的 'loose' 关系?最好是一种方法,我可以在其中引用系统视图或信息模式来提取此信息
老实说:这个设计有味道,如果可能的话,你应该考虑改变这个...
无法按照您描述的方式在非唯一列上定义 FOREIGN KEY CONSTRAINT
。
但是:定义JOIN
不需要FK!
我的建议:
像这样创建一个VIEW
:
CREATE VIEW dbo.MyView
AS
SELECT a.Col1,a.Col2,...
,b.Col1,b.Col2,...
FROM TableA AS a
[INNER/LEFT/RIGHT/FULL OUTER] JOIN TableB AS b ON a.RelField=b.RelField;
有了这样的视图,您将获得关于此非唯一信息的数据。
更新
根据您的评论:
the end goal is just to provide an external web service with information that says Column A from Table A is used to join onto Column B from Table B
您可以像这样创建元table:
CREATE TABLE dbo.ColumnReference
(
ColumnReferenceID INT IDENTITY
,TABLE_NAME_A VARCHAR(255) NOT NULL
,COLUMN_NAME_A VARCHAR(255) NOT NULL
,TABLE_NAME_B VARCHAR(255) NOT NULL
,COLUMN_NAME_B VARCHAR(255) NOT NULL
);
--inlcude SCHEMA if needed...
在这种情况下,您可以在自己的结构中维护这些关系...,您甚至可以添加细节、规则等等...
Web 服务将直接调用它。您可以使用 VIEW 将现有关系(定义为 FK CONSTRAINT
)与您自己的元 table(简单地与 UNION ALL
)结合起来。
我正在尝试构建一个 table,它将容纳 parent table 和 child table 的 'relationship'。但是,table 中的每一列都没有键或唯一,并且每列中都有重复值。
例子
Table A - Parent(事实)
**CartNumber**
Table B - Child
**CartNumber** not unique
CartValue
CartNumber
从 table A link 到 B 中的 CartNumber
我曾尝试使用 NOCHECK 实现外键,但当然这行不通,因为 child 列不是主键或唯一键。请记住,我只是想定义两个 columns/tables 之间有一个 link。有没有办法定义两列之间的 'loose' 关系?最好是一种方法,我可以在其中引用系统视图或信息模式来提取此信息
老实说:这个设计有味道,如果可能的话,你应该考虑改变这个...
无法按照您描述的方式在非唯一列上定义 FOREIGN KEY CONSTRAINT
。
但是:定义JOIN
不需要FK!
我的建议:
像这样创建一个VIEW
:
CREATE VIEW dbo.MyView
AS
SELECT a.Col1,a.Col2,...
,b.Col1,b.Col2,...
FROM TableA AS a
[INNER/LEFT/RIGHT/FULL OUTER] JOIN TableB AS b ON a.RelField=b.RelField;
有了这样的视图,您将获得关于此非唯一信息的数据。
更新
根据您的评论:
the end goal is just to provide an external web service with information that says Column A from Table A is used to join onto Column B from Table B
您可以像这样创建元table:
CREATE TABLE dbo.ColumnReference
(
ColumnReferenceID INT IDENTITY
,TABLE_NAME_A VARCHAR(255) NOT NULL
,COLUMN_NAME_A VARCHAR(255) NOT NULL
,TABLE_NAME_B VARCHAR(255) NOT NULL
,COLUMN_NAME_B VARCHAR(255) NOT NULL
);
--inlcude SCHEMA if needed...
在这种情况下,您可以在自己的结构中维护这些关系...,您甚至可以添加细节、规则等等...
Web 服务将直接调用它。您可以使用 VIEW 将现有关系(定义为 FK CONSTRAINT
)与您自己的元 table(简单地与 UNION ALL
)结合起来。