【发布时间】:2011-08-13 18:03:01
【问题描述】:
我正在做一个徽章系统,到目前为止,我有这个想法:
创建一个 UserMeta 表来存储将在标准中使用的数据。
UserMeta
===========================
user_id | posted_comment_count | flagged_comment_count | reputation | etc.
我想知道这是否是一个好主意,好像我需要添加一些元数据作为标准,我需要添加一个列,所以我想在 json 中使用序列化对象,或者例如。
另一个名为 Badge 的表:
badge_id | badge_name | badge_criteria
徽章标准是 json 或任何其他序列化格式,其中存储如下对象:
{
'posted_comment_count': '>= 20',
'flagged_comment_count': '=10',
}
还有一个将用户与徽章相关联的表(一个简单的关联表)
我正在使用 Doctrine2,我想使用 Event 来更新 UserMeta。
有什么意见、建议吗?
【问题讨论】:
-
我的偏好是使用 EAV 模式来存储用户元详细信息,以便可扩展。并且有单独的徽章类作用于数据。
-
@JohnP,EAV 对序列化对象有什么好处,在这两种情况下都“违反”经典数据库设计规则,此外,EAV 会丢失数据库完整性,就像序列化对象一样对象,但使用起来要复杂得多(以编程方式包装 EAV 比反序列化对象更难)
-
我的意思是它用于组织 UserMeta 表。特别是因为它允许您添加越来越多的标准。编写一个 eav 类来为用户获取相关数据应该是微不足道的。将数据存储为 json 是可以的。我的意思是您可以为每种类型的徽章创建一个类,该类实际上包含应用它的代码
标签: php database-design doctrine-orm badge