数据库表的设计
Posted ukzq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库表的设计相关的知识,希望对你有一定的参考价值。
不是数据库表设计大神
最近做订单系统,出现问题是这样的,
有客户表,订单表,套餐表.
通过下单生成订单表. 付款后更改订单状态码为1(表示已付款)
(1)如果甲订购2份黄焖鸡米饭,1瓶矿泉水,那么这个订单如何保存这个数据?
剖析:
整个订单系统还要能通过用户修改已下单但未付款的订单内容吗?(或许直接取消这次订单重新下单更好)
每个套餐的数量要放入一个food_numbers字段中,这个字段放在哪里才合适?不在foods这个食品套餐表,因为foods表中纯粹是食品套餐信息.
要有一个表可以存放点选的套餐的food_id和food_numbers,(但如果如下图,使用字符串字段,存放着food_name,food_numbers,及单笔*数量的price)
(2)通过varchar(2)的字段不可再查,不太灵活.
如果是有个购物车表,(其实可以想成Order_id,订单表)
每个小订单,存放着订单序列ID,用户ID,及食品套餐ID,及这个套餐的订购数量.
这样通过food_id可以修改其数量,而且通过这个cart_id保存不同的food_id及数量.
然后在订单表中加入这个cart_id作为外键,但这个cart_id必须保持是相同的,而不是序列生成的.
(3)一个人购物,一般是用一个购物车,购物篮.
用户在同一时间购买多样的食品及其数量.按下[下单]按钮,此时只生成一个cart_id,但表中这次购买下单的元组为有几样不同的就几行元组.
Dao层可以获取要插入的下一个序列的值,传导时虽然执行了两次Dao与数据库的sql连接,(因为要插入数据customer_id,food_id和food_numbers)
也就是说,这个insertNewCart的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_id和food_numbers.
而cart_id是那么一个,用户id(customer_id)是那么一个,这俩ID在一次下单是只是那么同一个,
而购物车中的food和数量是不固定的,所以使用ArrayList<Long/Integer>存储起来.
(4)使用CartsService
以上是关于数据库表的设计的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段