数据库表的设计

简介: 不是数据库表设计大神 最近做订单系统,出现问题是这样的,有客户表,订单表,套餐表.通过下单生成订单表. 付款后更改订单状态码为1(表示已付款)(1)如果甲订购2份黄焖鸡米饭,1瓶矿泉水,那么这个订单如何保存这个数据?剖析:整个订单系统还要能通过用户修改已下单但未付款的订单内容吗?(或许...

不是数据库表设计大神

 

最近做订单系统,出现问题是这样的,

有客户表,订单表,套餐表.

通过下单生成订单表. 付款后更改订单状态码为1(表示已付款)

(1)如果甲订购2份黄焖鸡米饭,1瓶矿泉水,那么这个订单如何保存这个数据?

剖析:

整个订单系统还要能通过用户修改已下单但未付款的订单内容吗?(或许直接取消这次订单重新下单更好)

每个套餐的数量要放入一个food_numbers字段中,这个字段放在哪里才合适?不在foods这个食品套餐表,因为 foods 表中纯粹是食品套餐信息.

要有一个表可以存放点选的套餐的food_idfood_numbers,(但如果如下图,使用字符串字段,存放着food_name,food_numbers,及单笔*数量的price)

(2)通过varchar(2)的字段不可再查,不太灵活.

如果是有个购物车表,(其实可以想成 Order_id ,订单表)

每个小订单,存放着订单序列ID,用户ID,及食品套餐ID,及这个套餐的订购数量.

这样通过 food_id 可以修改其数量,而且通过这个 card_id 保存不同的 food_id 及数量.

然后在订单表中加入这个 cart_id 作为外键,但这个 cart_id 必须保持是相同的,而不是序列生成的.

(3)一个人购物,一般是用一个购物车,购物篮.

用户在同一时间购买多样的食品及其数量.按下[下单]按钮,此时只生成一个 cart_id ,但表中这次购买下单的元组为有几样不同的就几行元组.

Dao 层可以获取要插入的下一个序列的值,传导时虽然执行了两次 Dao 与数据库的 SQL 连接,(cart_id,customer_id,food_id,food_numbers

也就是说,这个 createNewCart( cart_id,customer_id,food_id,food_numbers ) 的 Service 层接收的是一个这样的数据:

import java.util.ArrayList;

public class Carts {
    private long cart_id;//购物车ID
    private long customer_id;//用户ID
    private ArrayList<Long> food_id;//食品(商品)ID
    private ArrayList<Integer> food_numbers;//食品数量值

    /////* 客户下单后创建此对象 new Carts(接收一个购物车数据)
    public Carts(long cart_id, long customer_id, ArrayList<Long> food_id, ArrayList<Integer> food_numbers) {
        this.cart_id = cart_id;
        this.customer_id = customer_id;
        this.food_id = food_id;
        this.food_numbers = food_numbers;
    }
}

但传导的数据应是多个,即集合的  food_idfood_numbers

cart_id 是那么一个,用户 ID( customer_id )是那么一个,这俩 ID 在一次下单是只是那么同一个,

而购物车中的 food 和数量是不固定的,所以使用 ArrayList<Long/Integer> 存储起来.

(4)使用 CartsService

待更,今天太晚了,开着博客码代码了逻辑通顺了.

 

不完善 待更新

 

将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
相关文章
|
API 对象存储 网络架构
OSS restful API 调用 put,上传文件,python发http request示例
发送put 请求,向bucket中写入文件,代码中*** 的部分改成实际内容。rest请求主要问题在拼header时authorization可能会有问题,注意生成signature时的入参。#tested env: python version v3.9.6 #author: Fred #2022-1-11 import hmac import hashlib import base64 im
1443 0
|
存储 监控 NoSQL
Redis中的LRU淘汰策略深入解析
Redis的内存管理关键在于处理数据增长与有限内存的矛盾,LRU策略被广泛用于此。LRU基于“不常访问的数据未来访问可能性小”的假设,淘汰最近最少使用的数据。Redis通过双向链表实现,但并非严格LRU,而是采样算法以平衡性能和精度。用户可通过调整`maxmemory-samples`等参数优化。尽管LRU简单高效,但无法区分数据重要性和访问频率,可能误淘汰重要数据。合理设置参数、结合其他策略、监控调优是优化LRU使用的关键。
429 1
|
监控 安全 Java
JVM工作原理与实战(三十八):JIT即时编译器原理
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了JIT即时编译器、HotSpot中的JIT编译器、JIT优化技术、JIT优化建议等内容。
363 0
|
供应链 数据库 UED
商城如何设计订单系统超级有用
商城如何设计订单系统超级有用
471 0
|
消息中间件 监控 Apache
RocketMQ助力编程猫构建稳定的业务系统
通过使用商业版本的RocketMQ,依赖于有保障的SLA(99.99999999%数据可靠性,99.95%服务可用性),就像是站在巨人的肩膀上构建系统。
4522 100
RocketMQ助力编程猫构建稳定的业务系统
|
NoSQL 算法 Java
千万级订单生成的痛点与架构
千万级订单生成的痛点与架构
391 0
|
负载均衡 前端开发 Java
深入理解 Spring Cloud Gateway 的原理
你好,我是悟空。本篇给大家带来的是微服务框架中非常重要的一个组件 API 网关。
1450 0
|
安全
实战丨从0到1搭建结算平台
实战丨从0到1搭建结算平台
1000 0
|
前端开发
支付设计白皮书:支付系统的总架构
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
920 1