sqlite3 - 根据现有字段生成唯一ID

时间:2012-08-23 23:59:15

标签: sqlite

我有一个sql脚本可以创建表,设置触发器[1]并插入数据。在构建应用程序期间,通过sqlite命令行使用sql创建数据库。基本上我有一个表,根据三个字段,行必须是唯一的。我想基于三个字段自动生成散列或某种形式的唯一ID以用作主键。我的理解是sqlite没有内置的散列函数。是否有其他方法可以根据插入前触发器中的三个字段的内容生成唯一键?

[1] This isn't happening yet as I don't know how to generate a unique key

表格看起来像这样。我可以使用3个字段的主键(firstName,lastName,birthYear)但是我必须在每个表中使用所有三个我想要一个外键。在3个字段是字符串我想象它会是更多的空间,会减慢速度。

create table (
  firstName VARCHAR,
  lastName  VARCHAR,
  birthYear CHAR(4)
  ... more fields ...
);

2 个答案:

答案 0 :(得分:2)

在大多数情况下,最好使用单个自动增量整数列作为主键。然后对自然键进行建模,添加UNIQUE约束:

CREATE TABLE t1(
  id INTEGER PRIMARY KEY,
  firstName VARCHAR,
  lastName  VARCHAR,
  birthYear CHAR(4)
  UNIQUE (firstName, lastName, birthYear)
);

这样,您可以使用id的值作为其他表的外键,而UNIQUE约束可以防止您拥有具有相同自然键的重复记录。

答案 1 :(得分:0)

从这三列创建主键是不够的?

create table test(a int, b int, c int, primary key(a,b,c));