我正在创建一个简单的应用程序,有一个包含文件名的表,以及一个允许用户读取ID的列,例如:
|FILES |USERS |
|my.txt|1,3,5 |
|fo.txt|3,4,17|
|ba.jpg|13,31 |
这种方式是否适合创建用户组?
检索允许用户“3”的文件的正确SQL语句是什么?
答案 0 :(得分:3)
您不应在一个字段中组合多个值。
正常方法是:
|FILES |USERS|
|my.txt|1 |
|my.txt|3 |
|my.txt|5 |
|fo.txt|3 |
|fo.txt|4 |
|fo.txt|17 |
|ba.jpg|13 |
|ba.jpg|31 |
因此,如果您需要用户3
的文件列表,请执行以下操作:
SELECT Files FROM Table WHERE User='3';
要检查用户的文件,
SELECT Users FROM Table WHERE File='my.txt';
同样常见的是避免重复长字符串,创建新表CREATE TABLE FileNames (ID INTEGER PRIMARY KEY, Filename)
并始终引用ID而不是其他表中的名称。但那应该是你做出的绩效评估。
答案 1 :(得分:2)
您应该normalize数据库。所以你会有
|FILE |USER|
|my.txt| 1|
|my.txt| 3|
|my.txt| 5|
|fo.txt| 3|
...
这是您所显示的表的简单规范化。它不涉及任何组,但您的原始表也没有。
答案 2 :(得分:0)
您应该添加单独的“群组”表格:
|OID|group_id|user_id|
| 1| 1| 1|
| 2| 1| 2|
并在您的文件表中引用此组。如果要检查特定用户,则类似
select FILES from files join groups on files.group_id = groups.group_id where groups.user_id = 3