我正在为希望跟踪特定产品运输的用户创建一个单独的登录名。
所以我得到了桌子:
但是,现在我仍然停留在如何完成我的任务上,要求如下:
因此,我有一个可供跟踪的已发货产品列表(ProductTrackingProducts?)并希望n个用户能够跟踪状态。
我认为我的数据库模式不足以或有效地处理这个问题,所以我请求帮助。
发布于 2013-10-22 14:07:14
通常情况下,你会得到这样的东西:
CREATE TABLE Product (
ProductID,
Name,
Description
) ;
CREATE TABLE Order ( /* Shipped products */
OrderID,
ProductID,
ShippedDate
);
CREATE TABLE User (
UserName
) ;这是你最需要的桌子。这在订单和用户之间建立了多到多的关系(通常称为交叉口或桥接器表):
CREATE TABLE User_Order (
OrderID,
UserName
) ;对于每个订单,您将为每个跟踪该订单的用户在User_Order表中插入一条记录。所以你会有这样的东西:
OrderID UserName
-----------------------------
1 joe
1 jane
1 john
2 joe
3 bill
3 jane发布于 2013-10-22 14:11:17
我没有得到表ProductTrackings (Id,Name)是什么,但是根据您在需求中解释的内容,ProductShipping和TrackingUser需要多到多个关系。
请注意,对于同一产品,您可能有多个跟踪and (例如原始船运、ShippingLost和新船运、预付费返回托运等)。)但在一段时间内,只有一个是有效的。因此,添加TrackingIDVersion只表示最大值,这是最活跃的值。也有更好的选择,但只是想指出,产品跟踪是一对多的关系。
以下是可能的表设计:
CREATE TABLE ProductDetail
(
ID INT NOT NULL IDENTITY
,Name sysname NOT NULL
,color sysname NULL
,SIZE sysname NULL
,CONSTRAINT xpk_ProductDetail PRIMARY KEY (ID)
,CONSTRAINT uq_ProductDetail UNIQUE (Name)
)
CREATE TABLE ShippingDetail
(
ShippingID INT NOT NULL IDENTITY
,ProductID INT NOT NULL
CONSTRAINT xfk_ShippingDetail_ProductDetail
FOREIGN KEY REFERENCES ProductDetail (ID)
,TrackingID INT NOT NULL
,TrackingIDVersion INT NOT NULL
,CONSTRAINT xpk_ShippingDetail PRIMARY KEY (ShippingID)
,CONSTRAINT uq_ShippingDetail UNIQUE (ProductID,TrackingID,TrackingIDVersion)
)
CREATE TABLE UserDetail
(
ID INT NOT NULL IDENTITY
,NAME sysname NOT NULL
,pass sysname NULL
,CONSTRAINT xpk_UserDetail PRIMARY KEY (ID)
,CONSTRAINT uq_UserDetail UNIQUE (NAME)
)
CREATE TABLE ProductTrackingUsers
(
UserID INT NOT NULL
CONSTRAINT xfk_ProductTrackingUsers_UserDetail
FOREIGN KEY REFERENCES UserDetail (ID)
,ShippingID INT NOT NULL
CONSTRAINT xfk_ProductTrackingUsers_ShippingDetail
FOREIGN KEY REFERENCES ShippingDetail (ShippingID)
,CONSTRAINT XPK_ProductTrackingUsers PRIMARY KEY (UserID,ShippingID)
)https://dba.stackexchange.com/questions/51961
复制相似问题