SQlite外键逻辑

时间:2015-06-18 22:29:16

标签: database sqlite

我使用的是SQlite,PK列似乎是自动递增的。我有点担心我想要规范化type - 列的方法:

Table: Book
id   type  name
...  ...   ...
15    1     Foo
16    2     Bar
...   ...  ...


Table: Type
id  typename
1   magazine
2   novel

如果我重新创建Type - 表并且PK-index(=“id”)更改,例如,会发生什么? 1现在指的是novel而不是magazine。所以为了更健壮,我正在考虑插入一个自定义的第二列,其中包含我所引用的“逻辑”索引:

Table: Book
id   type  name
1    3     Foo
2    4     Bar

Table: Type
id   type  typename
1    3     magazine
2    4     novel

这样我的自定义类型ID将独立于主键。我认为最后一种方法的另一个优点是我不必重新询问新行的最新(新)id,因为我会参考之前知道的type列。这样当我插入行时我已经知道“type”id来进行引用(我正在使用数据库的线程,所以在方法中读取数据库中的值很难或不可能(?) - 所以如果我愿意的话需要id,我首先要问db。

这是一种合法的做法吗?或者我应该直接使用我自己管理的“自定义ID”创建一个非递增主键?

1 个答案:

答案 0 :(得分:0)

documentation所示,您只需在PK列中插入所需的值:

INSERT INTO Type(id, typename) VALUES(2, 'novel')

如果您从不需要自动增量值,则不应首先使用自动增量色谱柱。