【问题标题】:Creating relationships between tables创建表之间的关系
【发布时间】:2010-10-08 16:45:57
【问题描述】:

我的问题是关于 sql-server,但任何数据库背景的人都可以回答

如果我希望表 A 在某个列上与表 B 具有 1:1 的关系,我应该以某种方式修改 CREATE TABLE 语句以识别这种关系还是根本没有做的事情(而是它是由逻辑处理)?

编辑
我的问题的第二部分是:将其嵌入代码有什么意义?为什么不只是在选择/更新时进行逻辑处理?

【问题讨论】:

标签: sql-server database


【解决方案1】:

您需要做的就是让表 A 中的列成为表 B 主键的外键:

create table TableB (
    Id int primary key identity(1,1),
    Name varchar(255))

create table TableA (
    Id int primary key identity(1,1),
    Name varchar(255),
    TableBRelation int unique,
    foreign key (TableBRelation) references TableB (Id))

SQL 可能并不完美,但您应该能够理解。

至于为什么要在数据库中执行此操作而不仅仅是应用程序逻辑:

  • 其他数据库或开发人员可能会尝试访问您的数据库。您是否希望他们能够创建可能破坏您的应用程序的无效数据?不,这是参照完整性的要点之一。

  • 在某些时候,有人将不得不维护您的应用程序。在数据库级别定义您的密钥将清楚地识别您的数据之间的关系,而不是要求开发人员挖掘您的应用程序代码。

【讨论】:

  • 对于 1:1,外键本身是否也需要是唯一的?否则 TableA 可能有多个引用,即两行引用 TableB 中的相同 id
  • 非常非常好的点非常感谢你我没有考虑这个
【解决方案2】:

要创建 1:1 关系,只需将 B 表列设为外键或唯一。这将确保表 B 中只有一列与表 A 中的 PK 字段匹配,这样您就可以有效地获得 1:1 关系...

【讨论】:

    【解决方案3】:

    您可以设置foreign key 并添加一个约束以使其唯一。这将在您的表之间建立 1:1 的关系。

    【讨论】:

      猜你喜欢
      • 2013-01-14
      • 2021-09-02
      • 2012-04-05
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多