【问题标题】:pointing foreign key to datetime将外键指向日期时间
【发布时间】:2013-05-09 12:49:56
【问题描述】:

可以从 datetime 数据类型中创建外键吗? 我试试这个,但我收到错误消息: 消息 1776,第 16 级,状态 0,第 1 行 引用表 'penduduk' 中没有与外键 'tgllahir' 中的引用列列表匹配的主键或候选键。 消息 1750,第 16 级,状态 0,第 1 行 无法创建约束。查看以前的错误。

我使用这个查询

父表:

create table penduduk (
no int identity(1,1),
noktp char(11) primary key,
nama varchar(20),
tgl_lahir datetime NOT NULL,
namahari varchar(20),
tgl int,
bulan int,
namabulan varchar(20),
tahun int,
umur int
)

CREATE TABLE tua(
noktp CHAR(11) PRIMARY KEY,
tgl_lahir datetime NOT NULL CONSTRAINT tgllahir FOREIGN KEY REFERENCES penduduk(tgl_lahir),
FOREIGN KEY(noktp) REFERENCES penduduk(noktp),
)

【问题讨论】:

  • 您在 tua 表中引用了 penduduk(tgl_lahir)。但是 tgl_lahir 不是 penduduk 表中的主键

标签: sql sql-server sql-server-2008


【解决方案1】:

如果是合适的候选键,则只能在外键约束中将列用作引用。

来自在线书籍:

FOREIGN KEY 约束不必只链接到 PRIMARY 另一个表中的 KEY 约束;也可以定义为引用 另一个表中 UNIQUE 约束的列。

Foreign Key Constraints

在您的情况下,tgl_lahir 既不是唯一的也不是主要的,因此不能在您的外键约束中使用。

如果您向tgl_lahir 添加唯一约束,它应该可以工作;这是否适用于您的数据是真正的问题。

【讨论】:

    【解决方案2】:

    penduduk.tgl_lahir 列需要定义为 primary keyunique constraint 以供外键约束引用。

    SQLFiddle

    【讨论】:

      【解决方案3】:

      试试这个:

      create table penduduk (
      no int identity(1,1),
      noktp char(11) primary key,
      nama varchar(20),
      tgl_lahir datetime NOT NULL unique,
      namahari varchar(20),
      tgl int,
      bulan int,
      namabulan varchar(20),
      tahun int,
      umur int
      )
      
      CREATE TABLE tua(
      noktp CHAR(11) PRIMARY KEY,
      tgl_lahir datetime NOT NULL CONSTRAINT tgllahir FOREIGN KEY REFERENCES penduduk(tgl_lahir),
      FOREIGN KEY(noktp) REFERENCES penduduk(noktp),
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-02
        • 1970-01-01
        • 2015-03-02
        相关资源
        最近更新 更多