4

私はしばらくの間SQLデータベースのクエリに取り組んできましたが、実際に優れたテーブルを作成するのはまだかなり初心者です。私がよく苦労することの1つは、主キーを使用することです。

一部の警報装置のエラーをログに記録するために現在作成しているテーブルでは、5つの列が必要です。parkand列はcode、サイトを一意に識別します(ただし、park列はatm。使用されていません)。次にserial、問題の機器を識別する列とerror、エラーコードを含む列があります。最後にtimestamp、エラーがログに記録されるときのforがあります。

各サイトにはいくつかの異なる機器があり、機器によっていくつかのエラーが報告される場合があります。エラーが修正されると、その行はテーブルから削除されます。

したがって、エラーを一意に識別するには、、、、およびをチェックする必要parkがありcodeます。これらはすべて、実行される可能性のあるクエリに基づくインデックスの適切な候補のようです。ただし、これらすべてを結合された主キーとして定義することは私には正しくないようです。結局のところ、これらはテーブル内のほぼすべての列です。serialfault

私は何度か同様の問題に苦しんでいますが、良い解決策を見つけたとは感じたことはありません。行を一意に識別するためにほとんど(またはすべて)の列が必要な、このようなテーブルのいくつかの良い方法を誰でも提案できますか?

4

1 に答える 1

3

多くの人は、そのテーブルに ID 番号を追加して、それを主キーにするように言うだけです。

私はそれらの人々の一人ではありません。

行を一意に識別して重複を防ぐために列 {park, code, serial, fault} が必要な場合、dbms はそれを知る必要があります。2 つの方法のいずれかで、その要件を dbms に通知します。

  • PRIMARY KEY (パーク、コード、シリアル、フォルト)
  • NOT NULL UNIQUE (パーク、コード、シリアル、フォルト)

状況によっては、より小さな代理キー (ID 番号) を主キーとして使用することが理にかなっています。それは、dbms に実際の状況を知らせる責任からあなたを解放するものではありません。(とNOT NULL UNIQUE (park, code, serial, fault)。)ただし、これはあなたの状況には当てはまらないと思います。

于 2011-11-10T12:34:56.543 に答える