0

我正在使用 PHP 5.3 和 MySQL 5.5 进行开发。我的情况是这样的:

  • 我们有分配给一个组的用户(n 对 1 关系;每个用户都有一个组)
  • 每个组的用户都有自己的字段和属性,这些字段和属性与其他用户不同。(我们需要为每个用户存储这些字段)

所以,为了存储动态字段,我创建了一个fields表:

Fields:
  field_id
  group_id
  field_name
  field_type

其中包含每个组的字段名称和类型,然后我为它们的值创建了一个表:

Field_Values
  user_id
  field_id
  field_value

但我想知道这是最好的方法吗?

为每个组创建一个单独的表怎么样?它有什么不好的后果吗?(因为我认为查询会更容易)或者有没有其他有效的方法来处理这个问题?

任何有用的信息或提示将不胜感激。

4

2 回答 2

1

为什么不尝试将其视为文档存储?使用用户 ID 作为键,然后将字段存储为 JSON(或 XML)。然后每个用户只有一个组,但字段可能是完全唯一的。

于 2013-10-17T22:15:26.290 回答
1

我认为你走在正确的道路上。我可能会做类似的事情。

表:

group ( group_id ,group_name ,group_type ,... )

    1   group1
    2   group2

user ( user_id ,group_id ,user_name ,... )

    1   1   a
    2   1   b
    3   2   c

I am assuming users of one group share the same set of fields but have their own field values

field ( field_id ,group_id ,field_name ,field_type, field_active )

    1   1   field1
    2   1   field2
    3   2   field3

user_field_value ( field_value_id ,user_id, field_id ,field_value )

    1   1   1   value1
    2   1   2   value2
    3   2   3   value3

从长远来看,为每个组创建单独的表并不是一个好主意。

  • 当您想向这些表中添加更多列时,维护起来会变得更加困难。
  • 检索信息时,您需要根据 user_group 动态加入不同的表。
  • 等等 。
于 2013-10-17T22:36:15.650 回答