我正在创建一个简单的应用程序,有一个包含文件名的表,以及一个包含允许读取它的用户 ID 的列,例如:
|FILES |USERS |
|my.txt|1,3,5 |
|fo.txt|3,4,17|
|ba.jpg|13,31 |
这样创建用户组是否正确?
检索允许用户“3”使用的文件的正确 SQL 语句是什么?
我正在创建一个简单的应用程序,有一个包含文件名的表,以及一个包含允许读取它的用户 ID 的列,例如:
|FILES |USERS |
|my.txt|1,3,5 |
|fo.txt|3,4,17|
|ba.jpg|13,31 |
这样创建用户组是否正确?
检索允许用户“3”使用的文件的正确 SQL 语句是什么?
您不应该在一个字段中组合多个值。
正常的做法是:
|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 |
因此,如果您想要 user 的文件列表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 而不是其他表中的名称。但这应该是你做的绩效评估。
您应该规范化数据库。所以你会有
|FILE |USER|
|my.txt| 1|
|my.txt| 3|
|my.txt| 5|
|fo.txt| 3|
...
这是您显示的表格的简单规范化。它不涉及任何组,但您的原始表也没有。
您应该添加单独的“组”表:
|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