订单管理 SQL 架构

Pra*_*shi 1 sql sqlite

我正在为一家公司的销售人员设计一个 SQL 数据库,其中每个客户都会从该公司订购多个商品。我想为客户单独存储该订单。这将链接到客户表。

客户表:

  • 客户ID
  • 客户名称
  • 客户电话

目前我正在考虑为每个订单制作一个单独的订单表

订单表:

  • 产品编号
  • 产品数量
  • 总金额

但不知道如何将其链接回客户。或者说如何唯一标识每个订单表。我会在 NoSQL 中完成,但数据必须本地存储在 SQLite 中。客户可能会多次订购,因此我应该能够识别当前和以前的订单

sti*_*bit 5

不要为每个订单创建单独的表!这是一个非常糟糕的设计。关系表不是电子表格!

为订单准备一张表,并使用指向客户的外键。对于订单项目,有一个链接表,其中一个外键指向订单,另一个外键指向项目。这是相当标准的事情(我非常确定您会在许多有关关系数据库设计的教程中找到这样一个经典的示例。)。大致如下:

CREATE TABLE customer
             (id integer,
              name varchar(64),
              ...
              PRIMARY KEY (id));

CREATE TABLE product
             (id integer,
              name varchar(64),
              ...
              PRIMARY KEY (id));

CREATE TABLE order
             (id integer,
              customer integer,
              ...
              PRIMARY KEY (id),
              FOREIGN KEY (customer)
                          REFERENCES customer
                                     (id));

CREATE TABLE order_product
             (order integer,
              product integer,
              amount integer,
              ...
              PRIMARY KEY (order,
                           product),
              FOREIGN KEY (order)
                          REFERENCES order
                                     (id),
              FOREIGN KEY (customer)
                          REFERENCES customer
                                     (id));
Run Code Online (Sandbox Code Playgroud)

order对于某些 DBMS 中的表名或列名来说可能是一个糟糕的选择,因为它也是一个关键字,因此需要引用。所以可能选择其他名称。我使用它只是为了清楚起见。)