主キーは、その列の値が(相互に)一意であり、nullであってはならないことを指定する制約です。これは、テーブル内のすべての行を一意に識別することが保証されるようにするためです。これは、このテーブルを参照する外部キーを作成する場合に最も役立ちます。他のテーブルがない場合でも、テーブルが悪い状態になるのを防ぐことができます。たとえば、特定の日付に同じソース値が複数ある場合などです。
主キーフィールドには、ほとんどの場合、インデックスがあり、ルックアップやJOINによく使用されますが、2つの概念は異なります。
一部のDBMS(MySQL、SQL Serverなど)は、主キーにクラスター化されたインデックスを自動的に作成します。つまり、テーブル内のデータは、主キーを構成するフィールドによってディスク上で並べ替えられ、上記の一般的な操作がさらに高速になります。 ただし、postgresはデフォルトではこれを行いません。
次の構文を使用して、テーブル作成時に主キーを指定できます。
create table datatable
(
date date,
yesterday real,
today real,
tomorrow real,
reading real,
source varchar,
PRIMARY KEY (source, date)
)
新しい自動インクリメント整数フィールドを追加して、主キー(一般に代理キーと呼ばれる)として機能させることもできます。 または人工キー )。データ項目に他に適切な候補がない場合は、これを実行することをお勧めしますが、他の利点もあります(たとえば、より高速なJOINの可能性があります)。
create table datatable
(
id serial primary key,
date date,
yesterday real,
today real,
tomorrow real,
reading real,
source varchar
)