В вашем проекте сделан ряд предположений.
- Учитель может быть только в одном отделе.
- В каждом отделе может быть только один председатель.
- Председатель - это единственная позиция, которую вы хотите сохранить.
- Вы не хотите больше ничего знать о председателе.
- Только учителя могут быть председателями.
Если эти предположения сохраняются в реальной жизни, вы можете решить свою головоломку, воспользовавшись тем, что учитель может находиться только в одном отделе. Переместите флаг «председатель» в таблицу преподавателей. Это гарантирует, что председатель является членом отдела.
Однако, я думаю, что эти предположения не переживут встречи с реальностью. Если они этого не сделают, это приведет к существенной реструктуризации вашей схемы и запросов. Я бы реструктурировал схему для хранения более общего персонала и повернул преподаватель в роль отдела. Персонал и отделы находятся во многих отношениях. Это соотношение может использоваться для хранения типа отношения, а также любой дополнительной информации.
CREATE TABLE staff (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE departments (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE department_roles (
staff_id INTEGER REFERENCES staff(id),
department_id INTEGER REFERENCES departments(id),
role ENUM('chairman', 'teacher')
);
Этот макет гарантирует, что председатель находится в своем собственном отделе. Ограничения на department_roles могут приводить в действие бизнес-логику, например, иметь одного председателя на один отдел, или только преподаватели могут быть председателями, и их можно удалить или изменить позже, не затрагивая запросы. Это позволяет добавлять роли в будущем. Это позволяет добавлять дополнительную информацию к этим ролям. Это позволяет не учителям занимать должности департаментов.
Как насчет ограничения внешнего ключа на обоих столбцах? 'ALTER TABLE dbo.Departments ADD CONSTRAINT FK_Chairman ИНОСТРАННЫЙ КЛЮЧ (ID, Teacher_ID) ССЫЛКИ dbo.Учителя (Department_ID, ID) ' – russianmario
У меня есть две таблицы. «учителей» и кафедр. имеет иностранный ключ к отделу, а отдел имеет иностранный ключ к учителю. нет таблицы библиотеки – Anwar
Yup, извините - мой плохой. – russianmario