0

私はこれを持っています:

create table airport
(idairport varchar(1),
name varchar(1),
city varchar(1),
primary key(idairport));

1 つの都市に 3 つ以上の空港がないことを確認することはできますか?

編集:

演習は次のとおりです。

リレーショナル モデルに概念スキーマを変換します。各空港について、そこにいた航空機と可能な目的地を知りたいです。モデルが正規化されていない場合は、null 値が存在しないように正規化します。

制約:

  • 空港を出発して同じ空港に着陸するフライトはありません。
  • 都市には、多くても 3 つの空港があります。

解決策は、「CREATE TABLE」文のセットでなければなりません。できるだけ多くの整合性制約を表現してください。リレーショナル変換のため、すべて「NOT NULL」を指定し、これらのみを指定してください。さらに、必要な外部キーと代替キー (UNIQUE+NOT NULL) を定義することを忘れないでください。

翻訳後(間違いでなければ):

create table aircraft
(idaircraft varchar(1),
seating varchar(1),
primary key(idaircraft));

create table destination
(idairportorigin varchar(1) references airport(idairport),
idairportdestination varchar(1) references airport(idairport),
idaircraft varchar(1),
check(idairportorigin <> idairportdestination),
primary key(idairportorigin, idairportdestination, idaircraft),
foreign key (idaircraft) references aircraft(idaircraft));
4

3 に答える 3

0

みたいなことを教えてくれます。

 select city, count(city) citycount
 from airport
 group by city
 having count(city) >=3
于 2013-03-10T15:45:26.817 に答える
0

「1 つの都市に 3 つ以上の空港がないことを確認できますか?」

正規化されたデータ モデルではなく、create table ステートメントのみを使用します。

トランザクションがコミットされていない他のトランザクションを認識できない読み取りの一貫性があるため、トリガーのみを使用しても十分ではありません。

これを行う唯一の安全な方法は、MV テーブルのカウント列に 3 を超えないように制約を設定して、カウントを格納するオンコミット マテリアライズド ビューを使用することです。

于 2013-03-10T18:35:25.570 に答える
-2

データベースにトリガーを記述すると、次のSQLで空港の数が表示されます-

select count(idairport) from airport where city = 'entered city'

次に、挿入前または更新前のトリガーで、都市からの空港の追加を破棄できます。

また、jdbcなどのプログラミングAPIを使用する場合-

次に、上記のSQLによって、データを入力/更新する前に空港の数を取得し、このコーディング時点から追加/更新を破棄できます。

于 2013-03-10T15:55:12.727 に答える