Mysql数据库用于动态数量的字段

时间:2013-10-17 22:00:19

标签: mysql sql database-design

我正在使用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

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

如何为每个组创建单独的表?它有什么不好的后果吗? (因为我认为查询会更容易)或者还有其他有效的方法可以解决这个问题吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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动态加入另一个表。
  • 等。