繁体   English   中英

用户订阅的数据库设计

[英]database design for user subscriptions

因此,我是该主题范围内的数据库的新手,并为我确信相当简单的内容寻求一些建议。 首先,我使用MySql作为数据库,目前我有两个表,一个用于存储用户帐户和详细信息:

TABLE user
id | username | password | email_address | user_devices | contact_method

另一个用于由制作人存储视频内容,如下所示:

TABLE series
id | series_title | still_broadcasting | last_updated |

我想实现一个功能,用户可以选择希望在发布新版本时得到通知的系列,还可以选择如何通知这些版本(电子邮件或推送通知)以及通知频率(到达时) ,每小时,每天,每周)我想知道这样做的最佳方法是什么?

我自己想到了这些想法,但是正在寻找另一种意见/更好的方法:(所有想法减去4涉及存储如何通知用户以及在用户表中的频率)

  1. 向用户表添加一个名为following的文本列,并且每个系列仅包含csv
  2. 为每个系列向用户表中添加多个布尔列
  3. 在系列之后添加带有用户ID号的csv的系列表的文本列
  4. 创建一个用于通知的全新表格,尽管我真的不认为此用途非常多余

然后,我计划仅将cron作业添加到我的服务器,以实际地按照法规将通知发送到用户的

在此先感谢您的帮助。

如果您是我,我将添加第三个表,如下所示:

TABLE user
id | username | password | email_address | user_devices | contact_method |notification_type

TABLE series
id | series_title | still_broadcasting | last_updated

TABLE followings
id | user_id | series_id

我将在notification_type中(到达时,每小时,每天或每周)放入以下表格中,现在我将存储所有用户的首选系列。

这样可以轻松地添加,删除,更新或选择所有用户的首选系列。 所有这些都是简单的SQL查询。 另外,您还避免解析逗号分隔的字符串。

例如,如果要获取用户的所有首选系列:

SELECT * FROM followings AS f INNER JOIN series AS s ON f.series_id = s.id WHERE f.user_id = ? 

如果要获得所有喜欢意甲的用户:

SELECT * FROM followings AS f INNER JOIN user AS u ON f.user_id = u.id WHERE f.series_id = ? 

首先,值得阅读一些有关基础数据库设计的文章。 一个快速的谷歌出现了,它涵盖了识别关系

http://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html

最好的选择是使用链接表,即

CREATE TABLE userHasSeries (
    userID INT,
    seriesID INT 
);

然后可以在INNER JOIN查询中使用它来获取用户选择。 您在这里所做的是2个表之间的n:m链接。 一个内部联接的例子是

SELECT
    u.id AS userID,
    u.username,
    s.seriesID,
    s.series_title,
    s.still_broadcasting,
    s.last_updated
FROM users AS u
INNER JOIN userHasSeries AS uhs
    ON uhs.userID = u.id
INNER JOIN series AS s
    ON s.id = uhs.seriesID

如果users.user_devices也是一个逗号分隔的列表,我强烈建议您也采用类似的n:m方法。

部分答案是对其他答案中所写内容的补充:

不要在“ user_devices”字段中保留设备列表-将其分成单独的表。 实际上,您将需要两个表:一个用于列出各种设备的表,以及一个具有两个字段的联接表:user_id和device_id。 这将使您能够跟踪哪个用户拥有哪个设备,还可以提供每个设备的用户列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM