订单表字段
Id, OrderId(订单号), Address(收货地址), TotalMoney(需支付金额), UserId(用户), SubTime(下单时间), Remark(备注),State(订单状态), UnitPrice(每件商品的的单价), BookId(商品的编号)
1 100001 武汉 3000 36 2015 哈哈哈哈 0 89 4567
2 100001 武汉 3000 36 2015 哈哈哈哈 0 98 9087
这样建表 冗余太多
办法:把公共的字段放到主表里,把单独的字段放到另外一张表中
主 外
主表:Id, OrderId(订单号), Address(收货地址), TotalMoney(需支付金额), UserId(用户), SubTime(下单时间), Remark(备注),State(订单状态),
外表:UnitPrice(每件商品的的单价), BookId(商品的编号)
存储过程:
好处:sql语句执行速度比较快,原因:存储过程只需要编译一次,后续不需要再次编译,程序中的sql语句每次请求都需要在编译一下;web服务器往数据库服务器发送的只是存储过程的名字;安全性比较好,不会出现sql注入,类似于加参数的sql语句
缺点:可移植性比较差,例如:sqlserver有一个存储过程,换成mysql或者sqlLite(没有存储过程)
什么时候用存储过程?
一般互联网的项目、电商等不会用存储过程;一般内网系统会用存储过程,内网系统一般不会更换数据库,查询速度快
订单号有没有必要由程序传给存储过程,完全可以在存储过程中按照某个规则生成?
下完订单后需要支付,发给支付宝的数据肯定有一个订单号,如果订单号是在存储过程中按照某个规则生成的话,那么还需要把订单号返回到程序中,程序接收后,在发给支付宝;但是如果是在程序中生成一个订单号,我们就可以直接发给支付宝了,就不需要存储过程再把这个值返回来了,