【发布时间】:2019-09-15 04:11:10
【问题描述】:
我想要一些关于让模型可以在属性表中通过关系(使用 laravel 关系)访问的所有属性与将所有属性/设置存储在同一个表中但在 json 列中的一些反馈。
目前,我的应用程序有一个名为 settings 的属性表,它本质上也是多态的,因此多个模型可以在那里存储它们的属性。该表有类似的列
key (string),
value(string),
type (string) - tells if the value is of string, integer, boolean, json type
这样我就不会向 javascript 前端发送字符串,而是可以发送字符串、整数、布尔本机类型,以便更好地处理前端中的类型。在使用 php 函数将字符串值转换为 int、boolean、json 或字符串之前,我会在将属性发送到前端之前进行此转换,具体取决于类型。
这意味着如果一个模型有 40 个属性,所有属性都存储在自己的行中,因此创建一个模型会导致创建 40 行来存储它可能具有的所有属性。
现在上述方法与我只有一个 json 列的方法相比,我们可以将其称为设置,然后我将所有这 40 个属性转储到那里。
使用 json 列方法可以赢得什么?我刮掉了一张桌子,刮掉了一个额外的关系,每次我做一些查询时都需要在这个模型上加载。每次获取属性时,我也不必将它们转换为整数、布尔值、json 或字符串。 (记住上面的类型列)要记住这些属性不需要是可搜索的,我只需要它们来读取它们。我永远不会在查询中使用它们来返回基于这些属性的帖子。
使用哪个更好,我正在构建一个 CMS,顺便说一句,您可以在此处看到它的实际效果: https://www.youtube.com/watch?v=pCjZpwH88Z0
【问题讨论】:
-
EAV 很烂;避免它。
-
@RickJames 为什么它很烂?你有什么建议用 json 代替?
-
niko - mysql.rjweb.org/doc.php/eav
标签: mysql json database-design entity-attribute-value