Instoragecreate table Instorage( Gno char (4) not null Indate datetime primary key Userno char (10) not null, Addnum int not null, Sno char (4) not null, foreign key (Gno) references Goods(Gno), foreign key (Sno ) references Storages(Sno), foreign key(Userno) references Users(Userno) ) 分析这段代码并提出改正方法
时间: 2024-02-05 07:03:22 浏览: 65
洛谷 Round 1 GNO-OI 期末联欢赛 A 湿地版I 题解
这段代码有两个问题:
1. 主键的选择不太合理。这里使用了一个复合主键,包括了日期("Indate")和商品编号("Gno")两个字段,这样的主键不太适合表示入库单,因为同一天内可能会有多个入库单,而同一张入库单也不太可能包含多种商品。通常情况下,可以使用自增长的单一主键(比如"ID"字段)来表示入库单。
2. 字段的顺序不太合理。这里将商品编号("Gno")放在了第一位,这样在查询时需要使用复合索引才能高效地查找。通常情况下,可以将主键字段放在第一位,其它字段按照逻辑顺序排列。
为了修正这些问题,可以将代码改为:
```
create table Instorage (
ID int identity(1,1) primary key,
Indate datetime not null,
Gno char(4) not null,
Sno char(4) not null,
Userno char(10) not null,
Addnum int not null,
foreign key (Gno) references Goods(Gno),
foreign key (Sno) references Storage(Sno),
foreign key (Userno) references Users(Userno)
);
```
这里使用了自增长的"ID"作为主键,将主键字段放在第一位,将外键关系修正为正确的表格名和字段名。
阅读全文