优化 create table 库存信息( 书号 nchar(10) PRIMARY KEY, 图书类别 nchar(20) not null, 图书数量 int not null )create table 销售信息( 销售单号 nchar(10) NOT NULL PRIMARY KEY, 书号 nchar(10) foreign key references 库存信息(书号), 顾客号 nchar(10) foreign key references 顾客信息(顾客号), 图书销售数量 int NOT NULL, 销售日期 date default (getdate()), 销售金额 float null default (0) ) insert into 销售信息 (销售单号,书号,顾客号,图书销售数量) values ('b2','001','1',2)
时间: 2023-05-23 22:06:23 浏览: 89
Sqlserver中char,nchar,varchar与Nvarchar的区别分析
A:可以考虑以下优化:
1. 将图书类别改为图书类型,nchar(10)减少为nchar(4),减小存储空间。
2. 销售信息表中的图书数量重复存储了,可以直接从库存信息表中查询得到。
3. 销售金额可以根据销售数量和图书单价(从库存信息表中查询得到)计算得到,避免重复存储。
优化后的代码如下:
-- 库存信息表
create table 库存信息(
书号 nchar(10) PRIMARY KEY,
图书类型 nchar(4) not null,
图书单价 float not null
);
-- 销售信息表
create table 销售信息(
销售单号 nchar(10) NOT NULL PRIMARY KEY,
书号 nchar(10) foreign key references 库存信息(书号),
顾客号 nchar(10) foreign key references 顾客信息(顾客号),
图书销售数量 int NOT NULL,
销售日期 date default (getdate())
);
-- 插入数据
insert into 库存信息 (书号,图书类型,图书单价) values ('001','小说',20.0);
insert into 销售信息 (销售单号,书号,顾客号,图书销售数量) values ('b2','001','1',2);
-- 查询数据
select 库存信息.书号, 库存信息.图书类型, 库存信息.图书单价, 销售信息.图书销售数量,
销售信息.销售日期, 库存信息.图书单价*销售信息.图书销售数量 as 销售金额
from 库存信息, 销售信息
where 库存信息.书号 = 销售信息.书号;
阅读全文