gpt4 book ai didi

sql - 在不使用唯一列或键列的情况下定义两个 SQL Server 表(父列到子列)之间的关系

转载 作者:行者123 更新时间:2023-12-02 04:37:06 25 4
gpt4 key购买 nike

我正在尝试构建一个表来保存父表和子表的“关系”。然而,两个表中的每一列都没有键或唯一的,并且每列中都有重复的值。

例子

表 A - 父级(事实)

**CartNumber**

表 B - child

**CartNumber** not unique
CartValue
表 A 中的

CartNumber 链接到 B 中的 CartNumber

我曾尝试使用 NOCHECK 实现外键,但当然这行不通,因为子列不是主键或唯一键。请记住,我只是想定义两个列/表之间存在链接。有没有办法定义两列之间的“松散”关系?最好是一种方法,我可以在其中引用系统 View 或信息模式来提取此信息

最佳答案

老实说:这个设计有味道,如果可能的话,你应该考虑改变它......

没有机会按照您描述的方式在非唯一列上定义 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;

通过这样的 View ,您将获得关于此非唯一信息的数据。

更新

取自您的评论:

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

您可以像这样创建一个元表:

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)与您自己的元表(只需使用 UNION ALL)结合起来。

关于sql - 在不使用唯一列或键列的情况下定义两个 SQL Server 表(父列到子列)之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41480953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com