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

如何正确构造具有相似数据的mysql表,mysql,database,database-design,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 t

我很难想出一个定义订阅系统的好方法。我希望用户能够订阅其他用户、帖子和标签。我最初的想法是创建一个具有以下模式的订阅表

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
;对于
帖子
2
标签,订阅类型为
1
订阅id
是该元素行的id,有时是用户id,有时是帖子id,有时是标签id

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

必须有一种方法可以指示存在多个订阅类型,而不需要为每种订阅类型使用带有任意整数值的额外列。

  • 3张桌子,或
  • 3
    联合中选择
    ,包括或不包括UUID,或
  • 3个
    CASE
    元素,每个元素都有一个子查询
而且

  • 冗长、混乱的SQL,或
  • 冗长、混乱的应用程序代码,或
  • 每种都有一些