SQLite:如何管理群组?

时间:2013-09-24 10:32:47

标签: sqlite

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

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

这种方式是否适合创建用户组?

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

3 个答案:

答案 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