将一张表链接到另一张表?

Posted

技术标签:

【中文标题】将一张表链接到另一张表?【英文标题】:Link one table to another? 【发布时间】:2009-08-28 05:42:37 【问题描述】:

我正在尝试在我的 SQL Express 服务器中设置一些表,并且我想做一些事情来达到这个效果:

create table programs (
    progid int primary key identity(1,1),
    name nvarchar(255),
    description nvarchar(500),
    iconFile nvarchar(255),
    installScript nvarchar(255)
)

但是我希望每个“程序”都有一组与之关联的类别,最好的方法是什么?我在某处读到,将多个项目存储在单个类别条目下并不是一个好主意。

【问题讨论】:

【参考方案1】:

为这样的类别创建另一个表:

create table categories(
   catid int not null primary key identity,
   caterogy varchar(255) not null
)

然后使用第三张表存储与程序相关的类别:

create table progcategory(
    progid int foreign key references programs(progid) not null,
    catid int foreign key references categories(catid) not null,
    primary key(progid, catid)
)

【讨论】:

我正想问pk在哪里=) 如果我明白这一点,每个程序只能属于一个类别? @RCIX:不,pk 是复合键。这意味着给定程序只能有一个组合到给定类别。换句话说,它会阻止某人多次将“香蕉”与特定程序相关联。 哦……我现在明白了。所以你可以在那里有一个类别 A B 和 C 的程序?这应该很好用。谢谢! @RCIX:是的,没错。如果 A、B 和 C 类别相关联,则不会让您仅为该程序添加另一个 A、B 或 C。【参考方案2】:

首先,定义一个表(假设您还没有)以包含至少包含 id 和 value 列的类别列表。

一个程序可以只与一个类别相关联吗?如果是,则在 PROGRAMS 表中添加一列,并在 PROGRAMS 中的类别列与 CATEGORIES 表中的 id 列之间创建外键引用。

如果您希望能够将一个或多个类别与程序相关联,则需要一个附加表:

PROGRAM_CATEGORIES_XREF:

PROG_ID (pk, fk) CATEGORY_ID (pk, fk)

在这种情况下,由于 PROG_ID 列之间的链接,您不需要向 PROGRAMS 表中添加列。

【讨论】:

以上是关于将一张表链接到另一张表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将一张表复制到另一张表

Clickhouse 将一张表中的数据聚合到另一张表中

如何将一张表中的字符替换为另一张表的记录

用oracle存储过程将一张表的数据查出插入另一张表

oracle 将一张表的数据插入到另一张表

oracle的数据库中怎么将一张表中数据插入另一张表,两张表都存在