2

私のデータベース クラスでは、ER を作成して SQL に変換する必要があります。私たちの ER は図書館データベースのものです。「少なくとも1つ」の制約をSQLにどのように変換しますか? Google やクラスノートで見つけることができません (教科書は購入していません..) 太い線で表されています。

ER の関連セクション

図書館の各セクション (科学、人文科学、映画) は、少なくとも 1 人の従業員によって監督されなければならないと言いたいのです。ここに私が持っているものがあります:

従業員(pid、sin、給与、住所)

CREATE TABLE 従業員

(pid CHAR(9) NOT NULL,

sinCHAR(9)、

給料2倍、

アドレス VARCHAR(200),

主キー (pid)、

外部キー (pid)

参考人)

セクション (sid、名前、場所)

CREATE TABLE セクション

(sid CHAR (11) NOT NULL,

名前 CHAR (20),

ロケーション CHAR (35)、

主キー (sid))

Supervised_by(pid, sid,)

CREATE TABLE Supervised_by

(pid CHAR(9) NOT NULL,

sid CHAR(9) NOT NULL,

主キー (pid、sid)、

外部キー (pid)

参照従業員、

外部キー (sid)

参照セクション)

4

2 に答える 2

2

少なくとも 1 つの制約は、実際のさまざまな理由で問題があります。答えは、これを行う簡単な方法はないということです。ただし、それを行う方法はありますが、めったに使用されません。あなたが遭遇する大きな問題は、タイミングの問題です。通常、従業員の前に監督者レコードを入力する必要があるため、コミット時に少なくとも 1 つの制約のみを確認できます。これにより、デバッグが少し難しくなります。本質的に、これはステートメントレベルでは機能しません。

2 つ目の悪いニュースは、上記の問題のために、これを行うための標準的な方法がないことです。そのため、通常、完全に宣言的ではなく、完全に移植できない方法で拡張 SQL プログラミングを行うことを考えています。

たとえば PostgreSQL では、コミット時にチェックされる遅延可能な制約トリガーを作成できます。他のデータベースでは、平均は異なる場合があります。

于 2013-01-29T06:11:40.640 に答える
1

最善の解決策は、アプリケーションでこの制約を管理することです。たとえばchack制約を除いて、これを行う標準的なSQLの意味はありませんが、ここでは悪い考えです。ユーティリティよりも複雑になります。

于 2013-02-08T13:40:29.413 に答える