Sqlite3使用额外的引用表

时间:2016-03-15 01:02:50

标签: sql sqlite

所以假设您继承了一个只有一个表的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中键入哪些命令以从数据库的第一个状态转到最终状态?我做了一些研究,但未能解决这个问题。

1 个答案:

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