gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:41:38 26 4
gpt4 key购买 nike

我正在制作一个应用程序,除其他外,还有一个用户信息管理部分。用户注册时需要填写 10 个基本字段(名字、姓氏、地址等),但管理员还可以定义将包含在注册表中的自定义字段。目前我用 EAV 实现了它。我有一个表 "users",其中包含所有 10 个基本字段作为列,users_custom_fields (field_id, field_name, field_type) 包含所有自定义添加的字段和一个表 "users_custom_data"(user_id, field_id, field_value),其中包含自定义字段的所有数据。

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

谢谢

最佳答案

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

根据我的经验,是的。但是,您遇到了一个地方,我认为它可能有一席之地。但是您已经弄清楚如何处理由此引发的几个问题...

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

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

编辑:我几乎更愿意为“管理员”用户提供有限的界面来为这些东西创建额外的表而不是核心表中的列。

关于php - 使用自定义列字段而不是 EAV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com