将一个表中的ID链接到另一个表中的数据

时间:2012-03-15 12:47:37

标签: sql-server

我有一个任务,我要在数据库中创建两个表。表格看起来像这样;

ContactPerson(身份证,姓名,姓氏,电邮,电话号码)
公司(ID,CompanyName)

现在我的问题是我必须将ContactPerson链接到特定公司,但我不能将它们放在同一个表中。

我知道我可以使用join语句在一个查询中显示这两个表,但是当我将这个数据库实现到我的asp.net项目中时,我需要数据库知道哪个人链接到哪个公司。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你确实说过“具体”公司所以我假设你每人都有一家公司。

在名为CompanyID的用户表中添加一列...

ALTER TABLE ContactPerson
ADD CompanyID int 

(假设你的ids是整数)  然后创建以下外键:

ALTER TABLE [dbo].ContactPerson
    ADD CONSTRAINT [FK_ContactPerson_Company] 
    FOREIGN KEY (CompanyID)
    REFERENCES Company (ID) 

如果你想要多对多的关系,鲨鱼是正确的。

让所有公司成员:

选择     * 从    联系人 哪里    CompanyID = x

您不必应用外键约束,但如果不这样做,则可能会意外地将无效数据放入。所有“约束”都会为您强制执行规则,换句话说“确保sql”知道哪些人在哪家公司“正如你的问题所暗示的那样。

上述查询可以在没有外键约束的情况下工作,但是您的数据库不会“知道”关系。

..如果我尝试插入一个不存在的公司ID的人,SQL会抛出一个错误(这是一件好事)。

答案 1 :(得分:0)

由于这是一对多的关系,我通常会将这些数据放入ContactPerson表中。但是因为你明确说不能,所以只需创建一个连接表:

create table ContactPersonCompany
(
    ContactPersonID int not null foreign key references ContactPerson(ID),
    CompanyID int not null foreign key references Company(ID)
)

现在,您与ContactPersonCompany之间存在关联。

示例:选择来自特定公司的所有人

select
    cp.Surname,
    cp.Forename
from ContactPerson cp
inner join ContactPersonCompany cpc
on cp.ID = cpc.ContactPersonID
inner join Company c
on cpc.CompanyID = c.ID
where c.CompanyName = 'Some Company'