1

我正在创建一个简单的应用程序,有一个包含文件名的表,以及一个包含允许读取它的用户 ID 的列,例如:

|FILES |USERS |
|my.txt|1,3,5 |
|fo.txt|3,4,17|
|ba.jpg|13,31 |

这样创建用户组是否正确?

检索允许用户“3”使用的文件的正确 SQL 语句是什么?

4

3 回答 3

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   |

因此,如果您想要 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 而不是其他表中的名称。但这应该是你做的绩效评估。

于 2013-09-24T11:09:00.250 回答
2

您应该规范化数据库。所以你会有

|FILE  |USER|
|my.txt|   1|
|my.txt|   3|
|my.txt|   5|
|fo.txt|   3|
...

这是您显示的表格的简单规范化。它不涉及任何组,但您的原始表也没有。

于 2013-09-24T11:07:07.843 回答
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
于 2013-09-24T10:52:16.260 回答