您的初始结构看起来非常好--我只推荐一些简单的修改。 为了解决子项,我建议对订单上的所有项使用一个模型,只需添加一个父项id,然后在子项上引用它。 例如,让我们添加一个带有items\u id 1和空parent\u id的汉堡,然后如果我们想添加一些美味的培根,它将变成带有parent\u id 1的items\u id 2。额外的肉饼,同样的想法。。。成为父项id为1的项id为3。这个结构的好处是,你可以有无限的子项。。。你需要多少层次就有多少层次。 我还建议将价格添加到order\u items模型中,以获取销售点价格。这样,如果商品价格发生变化(或者你有一个销售,优惠券,折扣等),你的历史数字将被保留。 您可能还希望将所有货币字段(价格、总额等)转换为美分,并将它们作为整数存储在数据库中。这通常会给您带来更好的性能(超过varchar),在所有主要货币中都能很好地工作,并且避免了十进制数据类型可能出现的一些舍入问题。
3条答案
按热度按时间46scxncf1#
为什么这么复杂?
订购和订购物品正是您所需要的。在order\u项目中添加is\u incredent(tinyint)或is\u extra(tinyint)列,就是这样。
没有必要把价格、名称和数量分开。
hiz5n14c2#
性能问题(取决于获取方式-急切/延迟加载)
数据库设计在laravel上的性能不那么重要,而在laravel上实现您的设计(如何实现您的设计)是很重要的。如果您在laravel中通过使用所有的性能度量来正确地实现任何复杂的模型,那么它当然与您在数据库端引入的关系有多复杂或多少无关。
我想建议您安装laravel debugbar,并根据不同的设计比较您的查询数和性能。当您对laravel调试栏有了足够的了解之后,就可以实现laravel的缓存、索引技术。有一个全新的世界拉威尔性能调整。
注意:数据库的设计和复杂性在某种程度上决定了性能,但实际性能是如何在laravel中实现的。
请看:
laravel调试栏
急加载vs懒加载(雄辩)
对象缓存,配置缓存
mysql索引
优化命令(artisan cCommand)
路由缓存
数据库分块
你可以找到很多关于以上主题的教程,你只需要搜索一下laravel的性能。不要害怕使用laravel引入任何复杂的模型(数据库设计)。这就是你将如何学习“如何优化”或“你真的需要切断任何模型”。除非得到完整的需求规范文档(appdetail),否则没有人能向您推荐最佳的数据库设计。如果你根据laravel提供的不同性能指标来设计你的应用程序会更好。
我将在您的性能查询和性能调整的回复中发布此消息。
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),在所有主要货币中都能很好地工作,并且避免了十进制数据类型可能出现的一些舍入问题。