如何正确构造具有类似数据的mysql表

时间:2017-03-28 21:42:47

标签: mysql database database-design

我无法找到定义订阅系统的好方法。我希望用户能够订阅其他用户,帖子和标签。我最初的想法是拥有一个包含以下架构的订阅表

id int NOT NULL AUTO_INCREMENT
user_id int NOT NULL
subscription_id int NOT NULL
subscription_type int NOT NULL
subscribe_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
unsubscribe_date timestamp NULL DEFAULT NULL
notification_frequency int NOT NULL DEFAULT 1440 //number of minutes in  day

0的subscription_type为users1的{​​{1}}和posts的{​​{1}}以及2将是该元素行的id,有时是user_id,有时是post_id,有时是tag_id。

必须有更好的方法,而我能想到的其他唯一方法似乎更糟糕。就像制作多个订阅表一样,每个tags一个。或者在我的系统中的所有用户/帖子/标签中实施subscription_id个字段。

必须有一种方法可以表明有多种订阅类型,而不需要为每种订阅类型提供任意整数值的额外列。

1 个答案:

答案 0 :(得分:0)

不。

  • 3个表格,或
  • {li> 3 SELECTs UNION,有或没有uuids,或
  • 3 CASE个元素,每个元素都有一个子查询
  • ...

和...

  • 冗长,凌乱的SQL或
  • 冗长,凌乱的应用程序代码,或
  • 其中一些。