免责声明:我还没有进入我大学的数据库课程,所以请原谅我,如果我听起来无知:)我已经在网上搜索过,我找到了一些相关的信息,但看起来没什么可行的针对这种特殊情况。
我有一个存储用户信息的MySQL数据库。我已经有名称,ID,不同联系信息等列。
我的软件具有警报功能,允许每个用户创建自定义警报方案。您可以选中一个方框,在活动开始前收到5m,15m,1hr,2hr,1d,2d的警报。电子邮件和短信提醒有相同的警报方案,这意味着我需要为每个用户存储12-20个布尔值。
对于每个用户来说,使用20列TINYINT执行此操作似乎很难看,因此我一直在字符串列中使用简写符号(使用CSV)。我相信有一种更好的做事方式。
提前感谢您的宝贵帮助!
答案 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;