在不使用唯一或键列的情况下定义两个 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)结合起来。