建议:在MySQL中存储计划的正确方法

时间:2016-01-02 05:44:09

标签: mysql

免责声明:我还没有进入我大学的数据库课程,所以请原谅我,如果我听起来无知:)我已经在网上搜索过,我找到了一些相关的信息,但看起来没什么可行的针对这种特殊情况。

我有一个存储用户信息的MySQL数据库。我已经有名称,ID,不同联系信息等列。

我的软件具有警报功能,允许每个用户创建自定义警报方案。您可以选中一个方框,在活动开始前收到5m,15m,1hr,2hr,1d,2d的警报。电子邮件和短信提醒有相同的警报方案,这意味着我需要为每个用户存储12-20个布尔值。

对于每个用户来说,使用20列TINYINT执行此操作似乎很难看,因此我一直在字符串列中使用简写符号(使用CSV)。我相信有一种更好的做事方式。

提前感谢您的宝贵帮助!

1 个答案:

答案 0 :(得分:4)

您可以使用多对多关系:

CREATE TABLE alerts (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
CREATE TABLE alerts_users (alert_id INT, user_id INT);
INSERT INTO alerts (name) values ('5m'), ('15m'), ('1hr'), ('2hr'), ('1d'), ('2d');

使用15m

向用户添加提醒id = 1
INSERT INTO alerts_users VALUES ((SELECT id FROM alerts WHERE name = '15m'), 1);

使用id = 1获取用户的所有提醒:

SELECT name FROM alerts a INNER JOIN alerts_users ON a.id = alert_id WHERE user_id = 1;