我想在Mysql中为我的Python程序存储用户信息。 我要存储的一件事是用户名历史记录(静态列表) 另一个是他们是(动态列表)的成员
我不熟悉在Mysql中存储数据,因此试图找出实现此目的的最佳结构。似乎我可以为每个用户创建1个表,并将名称hsitory作为列,但是我阅读的所有内容都告诉我,这将是浪费和低效的。
例如。...
表=用户
user_ID | current_username | username_history | groups_joined | groups_banned
========|==================|==================|===============|==============
01567 | Dave |Michael,Geoff, |group1,group2, |group4,group5
| |Bob,Nigel,Colin |group2 |group5,group7
========|==================|==================|===============|==============
01568 | Fred |Martin,Simon, |group3,group4, |group4,group3
| |Leo,Nick,Arthur |group6 |group2,group12
我的第一个想法是执行上述操作,当我有一个要存储的列表(如username_history)时,我会将列表转换为带有逗号分隔值的字符串,并将其存储在LONGTEXT字段中,如图所示。然后在用户更改用户名时添加用户名,我可以使用concat添加到字符串中。
我猜这可以用,但是感觉很丑,我肯定必须有更好的方法。同样,我认为如果我需要在用户名历史记录中搜索名称,找出所有名为Fred的用户,这将是非常低效的。
我的下一个想法是为每个用户创建一个整个表,并在每个字段中用一个名称填充username_column。 但是在谷歌上搜索时,我发现数据库新手也有类似的问题,所有答复都说这会创建成千上万张表,效率很低。
好吧,现在我正在查看关系表(正确的术语?)。...
表= username_history
user_id | usernames
========|==========
01567 | but I still need a list here....
我确定这对于初学者来说是一个非常普遍的问题,但是我似乎无法理解我的用法的结构。
感谢任何花时间帮助和建议的人:)
答案 0 :(得分:1)
使用以下方法创建表username_history
create table username_history (
id int not null auto_increment,
user_id varchar(10),
username varchar(30),
created_at datetime default CURRENT_TIMESTAMP,
primary key (`id`),
index (user_id)
);
然后您可以使用GROUP_CONCAT函数以列表格式获取用户名。
答案 1 :(得分:1)
您确实需要三个表:
第一个包含用户可以加入的组的列表。它可以像唯一的ID和组名一样简单。
第二张表与问题中的表相似。为此,我们关心的唯一列是每个用户的唯一ID及其用户名。
第三个表有两列:user_id和group_id。当用户加入组时,会将具有用户和组的唯一ID的行插入到该表中。
如果需要,您还可以有一列带有添加行的时间戳记的列,以及一列用于显示用户状态的列。
“时间戳记”列会告诉您用户何时加入群组。
状态列可能指示用户是否被禁止进入该组,或者该用户是否离开了该组。