【发布时间】:2015-12-23 00:10:00
【问题描述】:
我正在制作一个应用程序,其中包括一个用户信息管理部分。用户需要填写 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”中的几行,这使得搜索变得非常困难并增加了不必要的复杂性? 如果应用程序动态更改表的结构,是否会被视为不好的做法?
谢谢
【问题讨论】:
-
如果用户驱动的应用程序改变了你的表结构,那么你就失去了控制
-
是的。这被认为是不好的做法
-
使用 eav 的一个技巧是为每种数据类型设置单独的表,否则您最终会将所有内容都存储为 VARCHAR
标签: php mysql database entity-attribute-value