首页 > 解决方案 > 订单管理 SQL 模式

问题描述

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

客户表:

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

订单表:

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

标签: sqlsqlite

解决方案


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

为带有指向客户的外键的订单提供一张表。对于订单项目,有一个链接表,其中一个外键指向订单,另一个指向项目。这是相当标准的事情(我很确定您会在许多有关关系数据库设计的教程中找到这样一个经典示例。)。类似于以下内容:

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));

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


推荐阅读