我有一个任务,我要在数据库中创建两个表。表格看起来像这样;
ContactPerson(身份证,姓名,姓氏,电邮,电话号码)
公司(ID,CompanyName)
现在我的问题是我必须将ContactPerson链接到特定公司,但我不能将它们放在同一个表中。
我知道我可以使用join语句在一个查询中显示这两个表,但是当我将这个数据库实现到我的asp.net项目中时,我需要数据库知道哪个人链接到哪个公司。
我该怎么做?
答案 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)
)
现在,您与ContactPerson
和Company
之间存在关联。
示例:选择来自特定公司的所有人
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'