从哪儿开始?
- 你应该使用
varchar2
not varchar
。虽然它们目前是相同的,但不能保证未来的行为varchar
- 电话号码作为数字字段?很多电话号码都以 0 开头。你正在失去这个。如果你想很好地显示它,你必须在退出时做一些时髦的字符串操作。
- 如果您的 ID 是数字,那么您应该将它们存储为数字。
- 很少有表不应该有主键的情况。
外键旨在强制数据库中的参照完整性。因此,此模式中至少应该有一个或两个以上的表。
一个典型的情况可能是这样的,它假设相同的postcode,phone
组合存在于agency
.
CREATE TABLE ORGANISATION(
ORG_REF VARCHAR2(5),
POSTCODE VARCHAR2(10) ,
TELEPHONE VARCHAR2(50),
DESCRIPTION VARCHAR(30),
AGENCY_ID VARCHAR(5),
CONSTRAINT PK_ORGANISATION PRIMARY KEY ( org_ref ),
CONSTRAINT FX_ORGANISATION FOREIGN KEY
REFERENCES SOME_OTHER_TABLE(POSTCODE,PHONE)
);
如果它只是一列而不是 2,则可以内联引用它,如下所示:
create table organisation (
org_ref number(16) not null
, phone varchar2(5) not null constraint fk_organisation
references agency ( phone )
, constraint pk_organisation primary key ( org_ref )
);
但是,我非常怀疑这是否可行。外键必须引用唯一约束。因此,根据您的评论判断,您必须有一个agency
具有唯一约束或主键的表phone, postcode
。
我怀疑您的数据模型有缺陷;听起来好像组织继承自agency
.
如果您当前正在查看表格,我将删除andphone
并进行连接以获取该信息:postcode
agency
agency
select a.*, o.postcode, o.phone
from agency a
join organisation o
on a.agency_id = o.agency_id
where a.id = 12345
进一步阅读: