[英]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涉及存储如何通知用户以及在用户表中的频率)
然后,我计划仅将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.