1

我有一个创建表、设置触发器[1] 和插入数据的 sql 脚本。在构建我的应用程序期间,通过 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 ...
);
4

2 回答 2

2

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

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

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

于 2012-08-24T01:00:11.567 回答
0

从这三列创建主键还不够吗?

create table test(a int, b int, c int, primary key(a,b,c));
于 2012-08-24T00:14:46.907 回答