У меня есть следующая схема:SQL Assertion: Менеджер комплекса
Emp (Ид INT, ENAME VARCHAR (50), заработная плата с плавающей точкой, электронная почта VARCHAR (80))
Works (Ид INT, сделал ИНТ pct_time поплавка)
DEPT (сделал INT, бюджет поплавка, ManagerID INT)
eid для идентификатора сотрудника. сделал - для отдела 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);
Это даже близко не так ли? Кроме того, возможно, я должен был просто сделать пару CHECKs вместо вставки? Я чувствую, что несколько CHECKs sloppier, но, вероятно, будет легче получить право.
EDIT: Основная причина, я спрашиваю, потому что я не знаю, если я правильно понять НЕ СУЩЕСТВУЕТ
У вас есть 2 столбца с плавающей запятой в 'Emp'.Вы имели в виду, чтобы указать другой столбец вместо второго, или вы просто пропустили тот факт, что вы уже включили этот столбец? –
К сожалению, это была просто опечатка, исправив ее сейчас –
Это может помочь узнать, какой колорит SQl вы используете. Конечно, в SQl-сервере нет таких вещей, как утверждения. – HLGEM