首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >产品跟踪数据库方案

产品跟踪数据库方案
EN

Database Administration用户
提问于 2013-10-22 13:01:30
回答 2查看 3.2K关注 0票数 1

我正在为希望跟踪特定产品运输的用户创建一个单独的登录名。

所以我得到了桌子:

  • 产品(Id,名称,颜色,描述,.)用于储存产品,没有其他用途
  • ProductTrackings (Id,名称)
  • ProductTrackingProducts (Id,ProductTrackingId (FK),ProductId (FK)),用于存储正在装运和可跟踪的已售出产品
  • ProductTrackingUsers (Id,ProductTrackingId (FK),用户名,密码)用于存储能够跟踪产品出货量的单个用户

但是,现在我仍然停留在如何完成我的任务上,要求如下:

  • 单个用户需要能够跟踪多个(已发货)产品(我想是通过ProductTrackingProducts表吗?)
  • 单个产品(通过ProductTrackingProduct)可以被多个用户跟踪

因此,我有一个可供跟踪的已发货产品列表(ProductTrackingProducts?)并希望n个用户能够跟踪状态。

我认为我的数据库模式不足以或有效地处理这个问题,所以我请求帮助。

EN

回答 2

Database Administration用户

发布于 2013-10-22 14:07:14

通常情况下,你会得到这样的东西:

代码语言:javascript
复制
CREATE TABLE Product (
ProductID,
Name,
Description
) ;

CREATE TABLE Order ( /* Shipped products */
OrderID,
ProductID,
ShippedDate
);

CREATE TABLE User (
UserName
) ;

这是你最需要的桌子。这在订单和用户之间建立了多到多的关系(通常称为交叉口或桥接器表):

代码语言:javascript
复制
CREATE TABLE User_Order (
OrderID,
UserName
) ;

对于每个订单,您将为每个跟踪该订单的用户在User_Order表中插入一条记录。所以你会有这样的东西:

代码语言:javascript
复制
OrderID         UserName
-----------------------------
1               joe
1               jane
1               john
2               joe
3               bill
3               jane
票数 1
EN

Database Administration用户

发布于 2013-10-22 14:11:17

我没有得到表ProductTrackings (Id,Name)是什么,但是根据您在需求中解释的内容,ProductShipping和TrackingUser需要多到多个关系。

请注意,对于同一产品,您可能有多个跟踪and (例如原始船运、ShippingLost和新船运、预付费返回托运等)。)但在一段时间内,只有一个是有效的。因此,添加TrackingIDVersion只表示最大值,这是最活跃的值。也有更好的选择,但只是想指出,产品跟踪是一对多的关系。

以下是可能的表设计:

代码语言:javascript
复制
    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)
    )
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/51961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档