向订单插入项目和子项目

bbuxkriu  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(344)

我需要能够添加子项目到我的订单系统。
我有这样的结构:

子项类似于一道菜的附加模型。
例如,在汉堡中,如果客户想要添加生菜、西红柿或洋葱。它还需要item\u id来标识该子项属于该订单的哪个项。
最后我得到了这个模型:
固定模型
这是最好的方法吗?
查询时是否会出现性能问题?
编辑:
订单子项中的项标识的原因是引用子项所属的项标识。
同一订单可以有多个相同id的项目,但每个子项目只能有一种类型。
可能我需要一个item\u pos列来知道子项属于哪个项,以防有两个具有相同id的项。

46scxncf

46scxncf1#

为什么这么复杂?
订购和订购物品正是您所需要的。在order\u项目中添加is\u incredent(tinyint)或is\u extra(tinyint)列,就是这样。
没有必要把价格、名称和数量分开。

hiz5n14c

hiz5n14c2#

性能问题(取决于获取方式-急切/延迟加载)
数据库设计在laravel上的性能不那么重要,而在laravel上实现您的设计(如何实现您的设计)是很重要的。如果您在laravel中通过使用所有的性能度量来正确地实现任何复杂的模型,那么它当然与您在数据库端引入的关系有多复杂或多少无关。
我想建议您安装laravel debugbar,并根据不同的设计比较您的查询数和性能。当您对laravel调试栏有了足够的了解之后,就可以实现laravel的缓存、索引技术。有一个全新的世界拉威尔性能调整。
注意:数据库的设计和复杂性在某种程度上决定了性能,但实际性能是如何在laravel中实现的。
请看:
laravel调试栏
急加载vs懒加载(雄辩)
对象缓存,配置缓存
mysql索引
优化命令(artisan cCommand)
路由缓存
数据库分块
你可以找到很多关于以上主题的教程,你只需要搜索一下laravel的性能。不要害怕使用laravel引入任何复杂的模型(数据库设计)。这就是你将如何学习“如何优化”或“你真的需要切断任何模型”。除非得到完整的需求规范文档(appdetail),否则没有人能向您推荐最佳的数据库设计。如果你根据laravel提供的不同性能指标来设计你的应用程序会更好。
我将在您的性能查询和性能调整的回复中发布此消息。

7nbnzgx9

7nbnzgx93#

您的初始结构看起来非常好--我只推荐一些简单的修改。
为了解决子项,我建议对订单上的所有项使用一个模型,只需添加一个父项id,然后在子项上引用它。
例如,让我们添加一个带有items\u id 1和空parent\u id的汉堡,然后如果我们想添加一些美味的培根,它将变成带有parent\u id 1的items\u id 2。额外的肉饼,同样的想法。。。成为父项id为1的项id为3。这个结构的好处是,你可以有无限的子项。。。你需要多少层次就有多少层次。
我还建议将价格添加到order\u items模型中,以获取销售点价格。这样,如果商品价格发生变化(或者你有一个销售,优惠券,折扣等),你的历史数字将被保留。
您可能还希望将所有货币字段(价格、总额等)转换为美分,并将它们作为整数存储在数据库中。这通常会给您带来更好的性能(超过varchar),在所有主要货币中都能很好地工作,并且避免了十进制数据类型可能出现的一些舍入问题。

相关问题