数据库表设计问题

Use*_*007 7 database-design

首先,这里是数据库新手。我正在尝试创建一个系统,用于将销售订单处理为采购订单,然后将采购订单拆分为运输容器。系统需要能够将销售订单行项目拆分为 2 个或更多采购订单,将采购订单行项目拆分为 2 个或更多运输容器。

会有一些(很多)来回调整,一旦销售订单行项目被拆分并放入多个采购订单,它可能会在以后以不同的方式拆分。当采购订单行项目被处理成运输容器时也是如此。我一生都无法最好地处理这个操作。

如果有帮助,这里是我到目前为止的表格,为简洁起见,排除了一些细节:

CREATE TABLE PurchaseOrder (
    Id INTEGER UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT,
    PurchaseOrderNumber VARCHAR(15) UNIQUE,

    PRIMARY KEY(Id)
);  

CREATE TABLE Container (
    Id INTEGER UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT,
    ContainerName VARCHAR(20) UNIQUE,
    PurchaseOrderId INTEGER UNSIGNED,

    PRIMARY KEY(Id),
    FOREIGN KEY(PurchaseOrderId) REFERENCES PurchaseOrder(Id),
);

CREATE TABLE SalesOrder (
    Id INTEGER UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT,
    ClientId INTEGER UNSIGNED,
    SalesOrderNumber VARCHAR(10),

    PRIMARY KEY(Id),
    FOREIGN KEY(ClientId) REFERENCES Client(Id)
);

CREATE TABLE SalesOrderLineItem (
    Id INTEGER UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT,
    SalesOrderId INTEGER UNSIGNED,
    ProductId INTEGER UNSIGNED,
    Qty INTEGER,
    Price DECIMAL(5,2),
    Cost DECIMAL(5,2),

    PRIMARY KEY(Id),
    FOREIGN KEY(SalesOrderId) REFERENCES SalesOrder(Id),
    FOREIGN KEY(ProductId) REFERENCES Product(Id)
);

CREATE TABLE PurchaseOrderLineItem (
    Id INTEGER UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT,
    PurchaseOrderId INTEGER UNSIGNED,
    SalesOrderId INTEGER UNSIGNED,
    ProductId INTEGER UNSIGNED,
    ClientId INTEGER UNSIGNED,
    MfgId INTEGER UNSIGNED,

    PRIMARY KEY(Id),
    FOREIGN KEY(PurchaseOrderId) REFERENCES PurchaseOrder(Id),
    FOREIGN KEY(SalesOrderId) REFERENCES SalesOrder(Id),
    FOREIGN KEY(ProductId) REFERENCES SalesOrder(Id),
    FOREIGN KEY(ClientId) REFERENCES Client(Id),
    FOREIGN KEY(MfgId) REFERENCES Mfg(Id)
);
Run Code Online (Sandbox Code Playgroud)

我正在考虑在销售订单行项目和采购订单以及采购订单行项目和容器之间创建额外的关联表以跟踪这种来回拆分?

帮助表示赞赏!

sa5*_*555 0

CREATE TABLE PurchaseOrderLineItem (
    Id INTEGER UNSIGNED UNIQUE NOT NULL AUTO_INCREMENT,
    PurchaseOrderId INTEGER UNSIGNED,
    SalesOrderLineItemId INTEGER UNSIGNED,
    SubQty INTEGER UNSIGNED,
    ContainerID INTEGER UNSIGNED,
    ClientId INTEGER UNSIGNED,
    MfgId INTEGER UNSIGNED,

    PRIMARY KEY(Id),
    FOREIGN KEY(PurchaseOrderId) REFERENCES PurchaseOrder(Id),
    FOREIGN KEY(SalesOrderLineItemId) REFERENCES SalesOrderLineItem(Id),
    FOREIGN KEY(ContainerID) REFERENCES Container(Id),
    FOREIGN KEY(ClientId) REFERENCES Client(Id),
    FOREIGN KEY(MfgId) REFERENCES Mfg(Id)
);
Run Code Online (Sandbox Code Playgroud)

链接到 SalesOrderLineItem 将允许您在任何销售订单行项目的不同容器中拥有多个采购订单行项目。

例如,四个PurchaseOrderLineItem 中的SubQty 可以是25,而SalesOrderLineItem 中的总数量可以是100。