代码之家  ›  专栏  ›  技术社区  ›  developer

带外键的SQL表设计

  •  0
  • developer  · 技术社区  · 4 月前

    我有两张桌子:

    产品中心

    列:产品ID(PK)、产品名称

    订购

    列:订单ID(PK)、订单名称

    我想存储每个订单的产品Id。

    是否最好创建另一个表:

    产品订购 表:

    Order ID (FK), Product ID(FK)
    

    或在 Order 表:

    Order ID (PK), Order Name, Product ID (FK)
    

    编辑:订单只能包含一个产品。

    2 回复  |  直到 4 月前
        1
  •  2
  •   Daniele    4 月前

    最佳方法取决于应用程序中产品和订单之间关系的性质。 如果订单现在或将来有可能包含多个产品,选项1(ProductOrder表)是更好的选择。它使您的数据库设计保持规范化,并避免了未来需求变化时可能出现的问题。 目前,选项2(订单表)可能是一个更简单、更高效的解决方案,但在大多数情况下,规范化通常会获胜,因为可扩展性和灵活性是首要任务!

        2
  •  0
  •   marcothesane    4 月前

    我的建议结合了@ValNik的评论和@Daniele的回答:

    CREATE TABLE orders (
    -- these columns, plus any needed at order level
      order_id INT NOT NULL PRIMARY KEY
    , cust_id  INT NOT NULL FOREIGN KEY REFERENCES(customer)
    , order_ts       TIMESTAMP NOT NULL
    , order_discount DECIMAL(10,2)
    , order_pctoff   DECIMAL(3)
    );
    
    CREATE TABLE orderitem (
    -- these columns come to mind, there might be others - at item level
      order_id INT NOT NULL FOREIGN KEY REFERENCES(orders)
    , prod_id  INT NOT NULL FOREIGN KEY REFERENCES(products)
    , quantity      INT NOT NULL
    , item_discount DECIMAL(10,2)
    , item_pctoff   DECIMAL(3)
    , PRIMARY KEY (order_id,prod_id)
    );