【发布时间】:2010-09-04 23:00:57
【问题描述】:
我正在寻找有关以下设计的建议和评论。所有的表都应该是大表(数百万条记录),并且经常更新和查询,并且允许任何类型的更新(更新、插入、删除)。
-- product
create table Product(
productID int not null identity(1,1),
name varchar(100) not null,
constraint PK_Product primary key(productID)
)
-- client
create table Client(
clientID int not null identity(1,1),
name varchar(100) not null,
constraint PK_Client primary key(clientID)
)
-- order
create table [Order](
orderID int not null identity(1,1),
clientID int not null,
orderDateTime datetime not null,
orderAmount money not null,
orderNote varchar(max) null,
constraint PK_Order primary key(orderID),
constraint FK_Order_Client foreign key(clientID) references Client(clientID)
)
exec sp_tableoption 'Order', 'large value types out of row', 0
create index IX_Order_client on [Order](clientID)
-- items
create table OrderItem(
orderItemID int not null identity(1,1),
orderID int not null,
productID int not null,
qty int not null,
amount money not null,
constraint PK_OrderItem primary key(orderItemID),
constraint FK_OrderItem_Order foreign key(orderID) references [Order](orderID),
constraint FK_OrderItem_Product foreign key(productID) references Product(productID)
)
create index IX_OrderItem on OrderItem(orderID)
【问题讨论】:
-
你需要做什么样的查询?
-
OrderItem在会计/发票中一般称为LineItem -
此假设设计用于 POS 系统 Mark。会有更新、插入、订单历史查询、AR 查询等
-
按原样,一切都很好。我建议使用
SUPPLIERS表,以及将SUPPLIERS链接到PRODUCTS的多对多表——即使企业制造产品,产品也需要构建材料。因此,您可能需要从多个供应商处采购,并且/或者随着时间的推移,这些供应商会发生变化…… -
...这意味着您需要
PRODUCTS中的再订购点列在您的库存不足时进行标记,然后再进行延期销售。
标签: sql-server database tsql database-design relational-database