I持って次のスキーマ:SQLアサーション:マネージャーの複雑な
のEmp(EID int型、ENAMEのVARCHAR(50)、給与フロート、電子メールはvarchar(80))
ワークス(EID int型、は int型、pct_timeフロート)(でし int型、予算のフロート、マネージャーID int型)
部門をしましたeidは従業員IDです。 は部門IDです。 私は主キーを太字にしました。 manageridはeidと同様に外部キーであり、Worksで行っています。
ここで、管理者が管理している従業員よりも高い給与を常に得ることができるように、「マネージャーコンプレックス」アサーションを追加したいと思います。
CREATE ASSERTION managerComplex
CHECK
(NOT EXISTS (SELECT M.salary
FROM Dept D, Emp M
WHERE D.managerid = M.eid) <=
(SELECT E.salary
FROM Works W, Emp E
WHERE W.eid = E.eid) AND
D.did = W.did);
は右に、このさえも近いです:ここで
は、私が考えてきた何ですか? また、ちょうど挿入の代わりにカップルのCHECKを作成したはずですか? 私は複数のCHECKsが嫌な気がしますが、おそらくもっと簡単になるでしょう。
編集:私はNOT EXISTS (SELECT ...)
が真であるためには、SELECT ...
は何の結果を返さない必要があります私が正しく理解してる場合ではない
あなたは 'Emp'に2つの' salary float'カラムを持っています。2つ目の列の代わりに別の列を指定することを意味しましたか、または既にその列を含めたという事実を忘れましたか? –
おっと、ちょうどタイプミスで、今修正しています –
あなたが使用しているSQlの味を知るのに役立つかもしれません。確かに、SQlサーバにアサーションなどのことはありません。 – HLGEM