0

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

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

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

TABLE series
id | series_title | still_broadcasting | last_updated |

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

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

  1. 向名为以下的用户表添加一个文本列,并且每个系列只有 csv
  2. 为每个系列向用户表添加多个布尔列
  3. 将文本列添加到系列表中,其中包含用户 ID 编号的 csv 跟随系列
  4. 为通知创建一个全新的表,尽管我并不认为这样做的目的是非常多余的

然后,我计划将 cron 作业添加到我的服务器,以实际定期向用户发送通知

提前感谢您的帮助。

4

3 回答 3

1

如果我是你,我会添加第三个表格,如下所示:

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 = ? 
于 2013-03-27T10:58:30.983 回答
1

First of all, it might be worth giving some articles on basic database design a read. A quick google turned up this which covers identifying relationships

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

Your best bet is to use a linking table i.e.

CREATE TABLE userHasSeries (
    userID INT,
    seriesID INT 
);

This can then be used in an INNER JOIN query to get the users choices. What you are doing here is an n:m link between 2 tables. An example inner join would be

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

If users.user_devices is also a comma seperated list I would advise heavily that you adopt a similar n:m approach there also.

于 2013-03-27T10:58:59.690 回答
1

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

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

于 2013-03-27T11:17:46.270 回答