sql - 应该在父表还是子表上创建外键?

标签 sql sql-server-2008-r2 foreign-keys

有什么不同?如果我有这两个表:

CREATE TABLE Account (Id int NOT NULL)

CREATE TABLE Customer (AccountId int NOT NULL)

我想要一个链接两者的外键,我应该做以下哪一个,为什么?

选项1:
ALTER TABLE [dbo].[Customer]  WITH CHECK 
  ADD  CONSTRAINT [FK_Accounts_Customers] FOREIGN KEY([AccountId])
  REFERENCES [dbo].[Account] ([Id])

选项 2:
ALTER TABLE [dbo].[Account]  WITH CHECK 
  ADD  CONSTRAINT [FK_Accounts_Customers] FOREIGN KEY([Id])
  REFERENCES [dbo].[Customer] ([Id])

最佳答案

取决于上下文。每个客户都有客户吗?哪个是家长?似乎一个帐户有多个客户,在这种情况下,引用属于客户表。

现在,也就是说,请调用实体 CustomerIDAccountID到处。它在主表上似乎是多余的,但名称应该在整个模型中保持一致。

关于sql - 应该在父表还是子表上创建外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15008696/

相关文章:

PostgreSQL 外键不存在,继承问题?

sql - 如何编写排除某些结果但包含缺少用于排除的关联的结果的查询?

sql-server-2008-r2 - SQL Server 代理作业 - 添加版本号

sql-server - sql查询通知服务问题

sql - 2 同一个表的外键可能会导致循环或者多重级联路径

mysql - EF 不允许外键列值为 Null,尽管我将其设置为 Nullable

python - 如何在 mac osx 上更新 python-sqlite

mysql join 没有响应

sql - 数据更新时暂停 Excel 图表

sql - 带有第二个数据库的 PostgreSQL FOREIGN KEY