在数据库中怎么做到所有用户共用一张表,但是每个用户的订单编号却是独立的命名空间?
1.实际场景:
数据库中订单表是公用的,所有用户在一张订单表上。
怎么让每个用户的订单编号是独立的命名空间?比如用户A下了两张订单,他的订单编号应该是C001、C002,用户B下了三张订单,他的编号起始位置应该还是C001,而不是C003,他的所有订单编号应该是C001,C002,C003。
请问怎么做到这一点?
难道要在每个用户底下存一个他当前开了多少个订单的字段,然后每次先读出来,加一,再存回去?这不太好吧……有没有更好的方法,在数据库端就做了?好像听人说起过用数据库函数或者触发器?
2.如果数据库能做到上述这一点,请问这个C001一般是存在主键字段里么?还是主键依然是一个数字类型的递增主键,只是在表中增加一个字段去存这个C001?
注:是在Mysql数据库中。
回复内容:
1.实际场景:
数据库中订单表是公用的,所有用户在一张订单表上。
怎么让每个用户的订单编号是独立的命名空间?比如用户A下了两张订单,他的订单编号应该是C001、C002,用户B下了三张订单,他的编号起始位置应该还是C001,而不是C003,他的所有订单编号应该是C001,C002,C003。
请问怎么做到这一点?
难道要在每个用户底下存一个他当前开了多少个订单的字段,然后每次先读出来,加一,再存回去?这不太好吧……有没有更好的方法,在数据库端就做了?好像听人说起过用数据库函数或者触发器?
2.如果数据库能做到上述这一点,请问这个C001一般是存在主键字段里么?还是主键依然是一个数字类型的递增主键,只是在表中增加一个字段去存这个C001?
注:是在Mysql数据库中。
1:数据库中不用那样存,你只需要遍历出来所有定单之后,显示时按顺序就行了。
2:给每个用户属性中增加静态成员变量
,并且数据库中相应增加字段,每次加入的数据就是你说的样子了。
楼主的意思应该是建立不同客户账户的统一订单管理库,不同账户只能看到属于自己的订单,有点类似云erp。
订单表可以冗余一个主键id,在数据存储唯一性上面,可以看为订单code+用户id来唯一确认一条数据。
如果说需要表结构优化设计的话,可以根据每个用户自动建立一张订单表,将每个用户的订单数据独立出来,表名类似order_userid 每次根据用户找到对应表名取数据,但在最后的综合后台对所有用户订单数据统计可能会稍微麻烦些。
请问你如何保证订单的唯一
如果根据题述意思设计数据库,则仅查找订单这一操作就将出现异常。因为我们根据订单号无法确定唯一订单。
主键的值用于唯一地标识表中的某一条记录。
(关于你的项目
我建议:
订单这张表的主键可以是OrderId
而用户表的主键可以是UserId
我认为您的问题应该出在数据库表的基本理解上。建议阅读数据库规范化的相关内容。)
用一个orderid表存放所有用户下一个order的id,如果觉得麻烦建议你用时间作为订单号的一部分。
不能作为主键,主键设计有一个原则——必须是和业务无关的。所以主键永远都是无意义的自增ID之类的。
我看不出你这个问题是要解决什么实际的需求
表结构的设计,要遵守最基本的三个范式的要求。三个范式的目的,是要保证字段之间不要有冗余,不要有依赖。上面几位说的问题,我就不重复了,你这样设计,违反了数据库表结构设计的三大范式的原则,建议你好好理清楚需求,不应该做这样的设计,或者我们理解错了,你把问题重新表述一番。或者直接贴出你的建表语句来。
可以使用联合主键将uid和cid组合起来,这就就可以保证唯一性了。但要注意如下两点:
1、要使用mysql联合主键自增,需使用MyISAM作为存储引擎。
2、使用联合 主键自增的时候,自增键不能是主键最左的键。
order表里面增加一个user_owner_order_key,然后自己写代码处理 C001 这种东西与真实order_id之间的互换逻辑就行了。
<code>//伪码 $user_owner_order_id = (select count(*) from order where user = $uid and order_id </code>
说一个其他方面的问题,一般的第三方支付
对于同一个订单号
是无法多次付款的,所以最好考虑清楚要不要这样做。
解决方法
用户表可以有一个字段存放订单数量,每次有新订单就取这个值加一,然后更新回去;
新订单获取已有订单的条数,加一,不过这个删除订单的时候必须是软删除了

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

MySQL批量插入数据的高效方法包括:1.使用INSERTINTO...VALUES语法,2.利用LOADDATAINFILE命令,3.使用事务处理,4.调整批量大小,5.禁用索引,6.使用INSERTIGNORE或INSERT...ONDUPLICATEKEYUPDATE,这些方法能显着提升数据库操作效率。

MySQL函数可用于数据处理和计算。1.基本用法包括字符串处理、日期计算和数学运算。2.高级用法涉及结合多个函数实现复杂操作。3.性能优化需避免在WHERE子句中使用函数,并使用GROUPBY和临时表。

Composer是PHP的依赖管理工具,通过composer.json文件管理项目依赖。1)解析composer.json获取依赖信息;2)解析依赖关系形成依赖树;3)从Packagist下载并安装依赖到vendor目录;4)生成composer.lock文件锁定依赖版本,确保团队一致性和项目可维护性。

MySQL被广泛应用于各种项目中的原因包括:1.高性能与可扩展性,支持多种存储引擎;2.易于使用和维护,配置简单且工具丰富;3.丰富的生态系统,吸引大量社区和第三方工具支持;4.跨平台支持,适用于多种操作系统。

在不同操作系统上搭建Laravel环境的步骤如下:1.Windows:使用XAMPP安装PHP和Composer,配置环境变量,安装Laravel。2.Mac:使用Homebrew安装PHP和Composer,安装Laravel。3.Linux:使用Ubuntu更新系统,安装PHP和Composer,安装Laravel。每个系统的具体命令和路径有所不同,但核心步骤一致,确保顺利搭建Laravel开发环境。

我们需要Composer因为它能有效管理PHP项目的依赖,避免版本冲突和手动管理库的麻烦。Composer通过composer.json声明依赖,并使用composer.lock确保版本一致,简化了依赖管理过程,提高了项目稳定性和开发效率。

Java适合开发跨服务器web应用。1)Java的“一次编写,到处运行”哲学使其代码可在任何支持JVM的平台上运行。2)Java拥有丰富的生态系统,包括Spring和Hibernate等工具,简化开发过程。3)Java在性能和安全性方面表现出色,提供高效的内存管理和强大的安全保障。
