2

動物園が動物や従業員などを追跡するために使用するデータベースを作成する必要があります。助けが必要なのは、動物に対して実行されるサービス (ワクチン接種など) を記録するために使用される Service テーブルだけです。または健康診断。記録する必要がある情報は、サービスを実行した従業員 (各サービスに対して 1 人の従業員のみが責任を負うと仮定します)、サービスを受ける動物、実行されたサービス、および実行された日時です。

私の主な問題は、最初の表に示されている複合 PK と 2 番目の表に示されている代理 PK のどちらを選択するかです。どのデザインが最も適しているか、またそれぞれのアプローチの長所と短所について、ご意見をお聞かせください。

助けてくれてありがとう。

+-----------------------+
|  Service              |                     
+-----------------------+
| (PK)(FK1) animal_id   |
| (PK)(FK2) employee_id |
| (PK) service_type     |
| (PK) date             |
| (PK) time             |
+-----------------------+

+-------------------+
|  Service          |                     
+-------------------+
| (PK) service_id   |
| (FK1) animal_id   |
| (FK2) employee_id |
| service_type      |
| datetime          |
+-------------------+
4

1 に答える 1

1

まず、日付と時刻を 2 つの列に分けないでください。その単一の列を「service_time」と呼びます。

列のセット {animal_id, employee_id, service_type, service_time} が行を一意に識別する場合、代理キーを使用するかどうかに関係なく、その列のセットに一意の制約を設定する必要があります。代理キーを使用しない場合、その制約は通常 として宣言されprimary keyます。代理キーを使用する場合、通常、その制約は宣言さ、そのセット内の各列にunique個別の制約が適用されます。not null

このテーブルへの外部キー参照を持つテーブルがない場合、代理キーとして追加の列を作成する意味はまったくありません。そして個人的には、それでもこのテーブルに代理キーを使用しません。結合の書き方を知っています。とにかく、ほとんどのグラフィカル クエリ ツールが結合を行います。

于 2013-02-08T00:11:44.190 に答える