【问题标题】:Define a relationship between two SQL Server tables (parent to child column) without the use of unique or key columns在不使用唯一列或键列的情况下定义两个 SQL Server 表(父列到子列)之间的关系
【发布时间】:2017-05-19 18:07:48
【问题描述】:

我正在尝试构建一个包含父表和子表的“关系”的表。但是,两个表中的每一列都不是键或唯一的,并且每个都有重复的值。

例子

表 A - 父级(事实)

**CartNumber**

表 B - 孩子

**CartNumber** not unique
CartValue

表A中的CartNumber链接到B中的CartNumber

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

【问题讨论】:

  • 不是最漂亮的解决方案,但它可能会使用第三张表来保存所有唯一使用的卡号,然后使两者都与该表建立关系。
  • @SamuelKirschner 第三个表会很大,因为它不仅是 CartNumbers,还有一系列其他列,每个列都用于链接到另一个表。我想最终目标是几乎有一个表来保存从一个表到另一个表的路径定义
  • 我理解正确吗?有一张桌子,比方说人。没有唯一的键,所以你看他们的名字。有一个鲍勃、一个汤姆和一个蒂姆,还有一个鲍勃和一个蒂姆。然后是一些相关的数据。数据知道它与 Bob 有某种关联,但不需要知道 which Bob?这闻起来......可能有助于解释更多背景:你想达到什么目的?
  • 如果您引用的内容不是唯一的,您将无法专门检索数据。(即,您可能无法通过这些引用获得所需的内容)。
  • @xblade 我刚刚再次阅读了您的问题并感觉到您对关系的概念有误。一个问题:Table A 中的 CartNumber 是否唯一?

标签: sql sql-server sql-server-2012 relationship


【解决方案1】:

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

没有机会按照您描述的方式在非唯一列上定义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,您将获得加入此非唯一信息的数据。

更新

形成您的评论:

最终目标只是为外部 Web 服务提供信息,说明表 A 中的 A 列用于连接表 B 中的 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...

在这种情况下,您可以在自己的结构中维护这些关系...,您甚至可以添加细节、规则等等...

网络服务将直接调用它。您可以使用 VIEW 将现有关系(定义为 FK CONSTRAINT)与您自己的元表(简单地使用 UNION ALL)结合起来。

【讨论】:

  • 感谢@Schnugo,如果我措辞不正确,我们深表歉意,但最终目标不是提取数据或根本不用担心数据。相反,最终目标只是提供一个外部 Web 服务,其信息表明表 A 中的 A 列用于连接表 B 中的 B 列
  • 谢谢 Schnugo,这样的事情实际上是我最后的手段,因为我认为填写此表将是手动的?将有数百个,接近数千个列,因此当然有很大的人为错误和维护空间。但是,如果没有其他方法,那么我想这是唯一的方法
  • @xblade,你描述的更多的是业务规则而不是关系,至少在数据库人员方面......我怀疑,用户稍后将能够从中创建查询...好吧,将所有真实关系定义为FK CONSTRAINT,并将规则关系定义为元表。如果这个概念被证明是一个明智且可行的设计,我会感到非常惊讶......
猜你喜欢
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多