1

テーブルを作成し、トリガーを設定し[1]、データを挿入するSQLスクリプトがあります。sql は、アプリケーションのビルド中にデータベースを作成するために sqlite コマンド ライン経由で使用されます。基本的に、3つのフィールドに基づいて行が一意でなければならないテーブルがあります。主キーとして使用する 3 つのフィールドに基づいて、ハッシュまたは何らかの形式の一意の ID を自動的に生成したいと考えています。私の理解では、sqliteにはハッシュ関数が組み込まれていません。before insert トリガーの 3 つのフィールドの内容に基づいて一意のキーを生成する他の方法はありますか?

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

テーブルはこんな感じ。3 つのフィールド (firstName、lastName、birthYear) の主キーを使用できますが、外部キーが必要な各テーブルで 3 つすべてを使用する必要があります。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

これら 3 つの列から主キーを作成するだけでは不十分でしょうか?

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