【发布时间】:2018-05-16 19:51:47
【问题描述】:
Harry 是巫师,他创建了一个名为“the Fellowship of the Ring”的团体。Harry 的巫师号是 77。
INSERT INTO group VALUES ('the fellowship of the ring','01');
INSERT INTO activity VALUES ('01','77','the fellowship of the ring’);
Gondor 也想加入群组和活动01。
从表中,我们知道“wizardno”是向导表的主键。
“groupname”是组表的主键。“acitvityno”是组表的UF键。
“acitvityno”是活动表的主键。
“groupname”是活动表的外键。 “wizardno”是活动表的UF键。在
将刚铎加入哈利的队伍。刚铎的巫师号是 99。
我用
insert into activity values (’01’,’99’,’the fellowship of the ring’);
得到错误: 原因:UPDATE 或 INSERT 语句试图插入重复键。 对于在 DBMS MAC 模式下配置的 Trusted Oracle,如果在不同级别存在重复条目,您可能会看到此消息。 *操作:要么删除唯一限制,要么不插入密钥。
但它必须保持唯一的限制。
drop table wizard;
drop table activity;
drop table group;
CREATE TABLE wizard (
wizardno NUMBER(2) NOT NULL,
wizardname VARCHAR2(30) NOT NULL,
);
ALTER TABLE wizard ADD CONSTRAINT wizard_pk PRIMARY KEY ( wizardno );
CREATE TABLE group (
groupname VARCHAR2(30) NOT NULL,
activityno NUMBER(2) NOT NULL
);
ALTER TABLE group ADD CONSTRAINT group_pk PRIMARY KEY ( groupname );
CREATE TABLE activity (
activityno NUMBER(2) NOT NULL,
wizardno CHAR(2) NOT NULL,
groupname VARCHAR2(30)
);
ALTER TABLE activity
ADD CONSTRAINT activity_pk PRIMARY KEY ( activityno );
ALTER TABLE activity
ADD CONSTRAINT activity_wizard_fk FOREIGN KEY ( wizardno )
REFERENCES wizard ( wizardno );
ALTER TABLE activity
ADD CONSTRAINT activity_group_fk FOREIGN KEY ( groupname )
REFERENCES group ( groupname );
【问题讨论】:
-
提示:你知道“主键”是什么意思吗?
-
约束唯一标识每条记录
-
@AAlex 在旁注中
Why the fellowship of the ring在组和活动表中都有定义? -
活动多,组参加其中一项活动。
-
@AAlex 作为最佳实践,请避免使用长描述作为连接表的键。