【问题标题】:How to design SQL Server table for a relation between same column values如何为相同列值之间的关系设计 SQL Server 表
【发布时间】:2018-08-11 13:21:42
【问题描述】:

在我的数据库中有一张包含我的客户的表格。客户可以是我向其提供原材料的产品的生产商或贸易商。

许多生产商拥有不同名称的贸易公司,这些公司可能在我的数据库中被列为独立客户,而且其中许多生产商又拥有不同名称的在线商店。所以很难找出谁属于谁,如果我知道,我必须在我的数据库中将它们“链接”在一起。

我的想法是添加一个只有 2 列的表:CuID(来自可维护的客户 ID)和链接的 CuID(假设我将此列称为 ReID=relation ID,也包含合作伙伴公司的 CuID。)。

每当我检测到它们之间的一种关系时,我都会在 CuID 列中添加 CuID,在“ReID”列中添加其他公司的 CuID。

在 Access 表单上,我有一个子表单显示相关客户的所有名称 (CuID:ReID =1:n)。

但是,当我在存储为 ReID 的客户记录中并在“CuID”列中显示 CuID 时,我如何反之亦然?

示例: 公司 A CuID=1 与公司 B CuID=3 有联系。在我的表中,我添加 1 / 3 公司 X CuID=7 与公司 B CuID=3 有联系。在我的表中,我添加了 7 /3

在显示公司 A 的表单上,我在子表单中找到相关的公司 B。 在显示 X 公司的表单上,我在子表单中找到了相关的 B 公司。

当 X 出现时,我如何在表单上将 A 和 B 表示为与 X 公司的关系??

我无法找到适合此要求的解决方案。 任何想法表示赞赏。 谢谢迈克尔

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    根据您的描述,您应该有两个表:

    • Companies
    • Shops

    Customers 应该有一个主键,例如:

    create table Companies (
        CompanyId int identity(1, 1) primary key,
        Name varchar(255),
        . . .
    );
    

    那么Shops,应该回参考一下:

    create table Shops (
        ShopId int identity(1, 1) primary key,
        CompanyId int references Companies(CompanyId),
        . . .
    );
    

    想必一家店铺只和一家公司有关系,所以发现关系时填写Shops.CompanyId即可。仅当存在多对多关系时,您才需要联结/关联表。

    【讨论】:

    • 明确地为约束指定名称是一个好习惯,例如CONSTRAINT FK_Shops_Companies FOREIGN KEY (CompanyId) REFERENCES Companies (CompanyId)。
    • 我现在找到了一个非常简单的解决方案,我仍然认为只有一个表有两列:SELECT a.ID, a.KdID, a.RelID FROM dbo.tblRelations UNION ALL SELECT a.ID , a.RelID , a.KdID FROM dbo.tblRelations 按我需要的方式工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多