0

是否可以从日期时间数据类型制作外键?我尝试了这个,但我收到了错误消息:Msg 1776,Level 16,State 0,Line 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),
)
4

3 回答 3

5

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

来自在线书籍:

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

请参阅外键约束

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

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

于 2013-05-09T13:00:37.487 回答
3

penduduk.tgl_lahir列需要定义为主键或具有唯一约束以被外键约束引用。

SQLFiddle

于 2013-05-09T13:00:49.550 回答
0

尝试这个:

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),
)
于 2013-05-09T13:03:20.890 回答