当前位置: 首页 > 知识库问答 >
问题:

使用自定义列字段而不是EAV

程成天
2023-03-14

我正在制作一个应用程序,其中包括一个用户信息管理部分。用户需要填写10个基本字段进行注册(名字、姓氏、地址等),但管理员也可以定义将包含在注册表中的自定义字段。目前,我用EAV实现了它。我有一个表“users”,其中包含所有10个基本字段作为列,users\u自定义字段(field\u id,field\u name,field\u type),其中包含所有自定义添加的字段,还有一个表“users\u custom\u data”(user\u id,field\u id,field\u value),其中包含自定义字段的所有数据。

我的问题是:如果在PHP后端添加一个新字段,只是在“用户”表中创建一个新列,而不是创建一个一对多的关系,其中每个用户条目也匹配“user_custom_data”中的几行,这不是更好吗使得搜索变得非常困难,并增加了不必要的复杂性?如果应用程序动态更改表的结构,这是否被认为是糟糕的做法?

谢啦

共有1个答案

彭英逸
2023-03-14

“如果应用程序动态更改表的结构,是否会被视为不良做法?”

以我的经验,是的。然而,你遇到了一个地方,我想它可能有一个地方。但是你必须想出如何处理这引起的几个问题...

显示的字段名存储在哪里?什么将跟踪这些新领域?等等...

您可以为每个这样的字段指定一个标准前缀,该前缀对创建它们的用户是隐藏的,并使用信息模式在运行时“查找”字段;但是您仍然必须处理可能不适合sql的名称,或者如果用户希望值限制为整数而不是任何有效字符串,该怎么办。所有这些问题都可以通过创建一个额外的表来保存元数据来解决,但接下来(在大多数情况下)您将开始(针对EAV)使治疗比疾病更糟糕。

编辑:我几乎宁愿给“管理员”用户有限的界面来为这些东西制作额外的表,而不是核心表中的列。

 类似资料:
  • 我在修改我安装的WordPress流行帖子插件时遇到了一些问题。 它可以选择从自定义字段获取缩略图,我已将其输入为“image_facebook”。但是缩略图没有显示。 在检查代码时,我发现imgsrc有post id而不是返回图像URL。 我已经把问题缩小到我安装的另一个插件http://wordpress.org/plugins/advanced-custom-fields/ 当它处于活动状态

  • 介绍 model 参考文档已经介绍了如何使用 Django 的标准字段类;例如 CharField, DateField,等等。对于很多应用来说,这些类足够用了。 但是在某些情况下, 你所用的Django 不具备你需要的某些精巧功能,或是你想使用的字段与 Django 自带字段完全不同。 Django 内置的字段类型并不能覆盖所有可能遇到的数据库的列类型,仅仅是些普通的字段类型,例如VARCHAR

  • 问题内容: 我需要在MySQL表中插入包含32个字段的长行。 我想做这样的事情: 显然,如果字段与MySQL表字段的顺序相同,则可以正常工作。但是,我的表的第一个字段具有自动递增的ID。 我想要的是填写除第一个(id)以外的所有表名。 有什么建议吗? 问题答案: 仅用作您的第一个值,该字段仍将按预期工作:

  • 问题内容: 我正在使用ColdFusion 8和SQL Server 2008 R2。 我试图查询一列值以获取具有范围内的值的行。该列应为数字,但不是。它被设置为varchar(由其他人)。有100,000多行数据。这是数据的伪样本: 我的查询如下所示: 该查询不会运行,因为where语句的列是varchar,并且出现转换错误,因此我必须将where语句更改为此: 现在,当我运行这样的查询时,它会

  • 我正在尝试使用Ajax更新Wordpress中的自定义域(例如,使用表单文本输入,通过单击按钮替换自定义域文本)。我正在使用高级自定义字段插件,并遵循我在这里找到的示例,但这似乎不起作用:https://support.advancedcustomfields.com/forums/topic/use-update_field-with-ajax/ 我所做的是: (1)将html表单添加到我的si

  • 有没有一种方法可以指定不同的序列化/反序列化JSON字段名,而不必显式地写出getter和setter方法,或许可以使用lombok getter和setter? 与此示例类似,下面的代码允许将传入的JSON反序列化为不同的POJO字段名。它还会使POJO字段名序列化为: 但这当然是不成立的。