sql - 订单管理 SQL 模式
问题描述
我正在为一家公司的销售人员设计一个 SQL 数据库,每个客户将从该公司订购多个商品。我想将此订单唯一地存储给客户。这将链接到客户表。
客户表:
- 客户 ID
- 客户名称
- 客户电话
目前我正在考虑为每个订单制作一个单独的订单表
订单表:
- Product_id
- 产品数量
- Total_amt
但无法弄清楚如何将其链接回客户。或者如何唯一标识每个订单表。我会在 NoSQL 中完成,但数据必须本地存储在 SQLite 中。客户可能会多次订购,所以我应该能够识别当前和以前的订单
解决方案
不要为每个订单创建单独的表格!这是一个非常糟糕的设计。关系表不是电子表格!
为带有指向客户的外键的订单提供一张表。对于订单项目,有一个链接表,其中一个外键指向订单,另一个指向项目。这是相当标准的事情(我很确定您会在许多有关关系数据库设计的教程中找到这样一个经典示例。)。类似于以下内容:
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 中的表或列名可能是一个糟糕的选择,因为它也是一个关键字,因此需要引用。所以可能选择了其他东西。我只是为了清楚起见才使用它。)
推荐阅读
- python - 如何使检查点在 tf.train 优化器中存储时刻和其他相关变量
- c# - Is it possible to inject IHttpClientFactory to a strongly typed client?
- django - 防止 Django 模板 base.py 解析内联中所有可能的外键关系
- html - 如何进行动态显示/隐藏和必需/不需要的控制(angularjs)
- spring - FilterRegistrationBean 是否使用 AntPathMatcher 来匹配 url 模式?
- java - 如何提高 ScrollPane JavaFX 的滚动速度
- angular - 如何使用 [Authorize] WebAPI Core 防止登录挑战?
- ruby - 如何在 AWS Lambda 中使用 Ruby 启动媒体转换?
- c# - 如何根据其他模型项的答案更改字段的值
- python - Python:无法从属性文件中读取属性