如何在数据库中构建表活动?

时间:2012-07-12 21:36:57

标签: mysql database-design

我有一个用cakephp编写的带有mysql数据库的站点。 在我的网站中,我想跟踪每个用户的活动,例如(如本网站),如果用户插入我希望将此活动放入我的数据库的产品。 我有两种方式: 1)一个名为Activities的表: - ID - 用户身份 - 标题 - 文字 - 类型(活动类型:评论,后期编辑)

2)更多表格因活动而异 - table activities_comment - table activities_post - table activities_badges

问题是,当我进入用户的页面活动时,我可以有不同类型的活动,我不知道哪个解决方案更好,因为评论有标题和评论,帖子只有一个文本,徽章有一个外部id到它的表(例如)ecc ... 请帮帮我

1 个答案:

答案 0 :(得分:2)

我不熟悉CakePHP,但从纯粹的数据库角度来看,您的数据模型应该看起来与此类似:

enter image description here

enter image description here符号表示类别(aka。继承,子类,子类型,泛化层次结构等)。有关详细信息,请查看ERwin Methods Guide中的“子类型关系”。

实施该类别通常有3种策略:

  1. 单表中的所有类型。这需要大量的NULL并且需要CHECK来确保单独的子类型没有被不适当地“混合”。
  2. 所有具体类型在单独的表中(不包括基础,在您的情况下为ACTIVITY),这意味着必须在所有子表中重复公共字段和关系。
  3. 所有类型在单独的表中(包括基础)。这种实现需要更多的JOIN,但是灵活和干净。它应该是您的默认值,除非有充分的理由反对它。