将一张表链接到另一张表?
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 列之间的链接,您不需要向 PROGRAMS 表中添加列。
【讨论】:
以上是关于将一张表链接到另一张表?的主要内容,如果未能解决你的问题,请参考以下文章