[英]Sqlite3 store list in column
我有一些数据需要存储在 sqlite 数据库中,如下所示
[
[user1,[python,java,javascript],21],
[user2,[csharp,python,c,java,php,sql],18],
[user3,[],52]
[user4,[python],73]
]
如何在 sqlite3 中存储每个用户的编程语言列表
标准的解决方案是为每件事都有一个表:用户、语言和保存一对多关系的表,在这种情况下是 users_languages。 用户和语言是相对较大且大小可变的密钥,因此引入人工密钥通常是 integer auto_increment 的非常常见的优化。
create table languages (
language text primary key
);
insert into languages values ('python'), ('java'), ('javascript'), ('csharp'), ('c'), ('php'), ('sql');
create table users (
user text primary key,
age tinyint not null
);
insert into users values ('user1', 21), ('user2', 18), ('user3', 52), ('user4', 73);
create table users_languages (
user text not null,
language text not null,
foreign key (user) references users (user),
foreign key (language) references languages (language),
unique(user, language)
);
insert into users_languages values ('user1', 'python'), ('user1', 'java'), ('user1', 'javascript');
...
-- list of languages for a given user (row per language)
select language from users_languages where user = '...';
-- list of languages for all users (row per user)
select user, group_concat(langauge) from users_langauges group by 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.