【发布时间】:2021-09-15 13:55:22
【问题描述】:
您好,我找不到我的 sql 代码。
这是我目前制作的代码:
create table Client_Info
(
"Client_Name" varchar2 (30) primary key,
"Birthday" date not null,
"Zip_Code" number(4) not null,
"Weapon_Rank" number(1) not null,
"Registration_Date" date not null
)
create table Ammunition_Info
(
"Ammo_Id" number(8) primary key,
"Ammo_Type" varchar2(30) not null,
"Ammo_Round" varchar2(30) not null,
"Amount" number(2)not null
)
create table Gun_Info
(
"Serial_Number" number(8) primary key,
"Model_Name" varchar2(20) not null,
"Clasification" varchar(20) not null,
"Year_of_production" date not null,
"Weapon_Rank" number(1) not null,
"Ammo_Type" varchar2(30) not null,
"Ammo_Round" varchar2(30) not null,
constraint wrank_fk foreign key("Weapon_Rank") references Client_Info("Weapon_Rank"),
constraint amt_fk foreign key("Ammo_Type") references Ammunition_Info("Ammo_Type"),
constraint amr_fk foreign key("Ammo_Round") references Ammunition_Info("Ammo_Round")
)
当我尝试在 Gun_Info 表中链接外键时出现错误,我不知道出了什么问题
谁能指出我犯了什么错误
【问题讨论】:
-
错误很明显。您的外键引用应该是每个引用表中的主键。你有什么不明白的?
-
哦,谢谢你指出我不知道那是怎么飞到我头上的@Gordon Linoff
-
顺便说一句,将 Client_name 作为主键是一个非常糟糕的主意。造成这种情况的原因有很多,例如,您将如何处理 2 个同名的不同人?
-
作为一个侧面观察,通过创建用双引号括起来的列名,您正在创建区分大小写的名称。这会回来咬你。如果你想把它们写成混合大小写,那很好,但要省略双引号,这样它们就不会区分大小写,从而迫使你 always 将它们括起来——并使用确切的创建它们的案例。
-
另一个大小观察 - 邮政编码不是 数字,它们是字符串 - 在美国 - 仅限于数字 字符。任何时候你将某个东西声明为 number 都会丢失任何前导零。基本规则:如果对元素进行算术运算是不合逻辑的,那么它就不是一个数字,不应该这样声明。
标签: sql oracle oracle-apex