所以假设您继承了一个只有一个表的SQLITE3数据库:
CREATE TABLE data (id integer, name text)
它看起来像这样:
------- DATA -------
89074352 red
12344112 red
47298489 blue
34444333 blue
23453245 red
10000001 yellow
...
--------------------
所以文本元素非常多余。并且假设文本元素是巨大的而不是仅仅一个单词。您可以通过创建仅包含每个文本元素一次的新表来避免这种情况。数据库的最终状态将有两个如下所示的表:
CREATE TABLE text_keys ("key" integer primary key autoincrement, "name" text not null)
------- TEXT_KEYS -------
1 red
2 blue
3 yellow
...
-------------------------
CREATE TABLE data ("id" integer, "key" integer references text_keys)
------- DATA -------
89074352 1
12344112 1
47298489 2
34444333 2
23453245 1
10000001 3
...
--------------------
您在SQLITE3中键入哪些命令以从数据库的第一个状态转到最终状态?我做了一些研究,但未能解决这个问题。
答案 0 :(得分:1)
首先创建引用表,然后创建新的数据表。它会是这样的:
create table text_keys (
text_key_id integer primary key,
name text
);
insert into text_keys (text_key_id, name)
select distinct NULL, name
from data;
create table new_data as
select d.id, tk.text_key_id
from data d join
text_keys tk
on d.name = tk.name;