Вы можете определить ограничение UNIQUE
в таблице Person
:
CREATE TABLE Company (
company_id SERIAL PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE Person (
person_id SERIAL PRIMARY KEY,
company_id BIGINT UNSIGNED,
UNIQUE KEY (person_id, company_id),
FOREIGN KEY (company_id) REFERENCES Company (company_id)
) ENGINE=InnoDB;
CREATE TABLE User (
person_id BIGINT UNSIGNED PRIMARY KEY,
FOREIGN KEY (person_id) REFERENCES Person (person_id)
) ENGINE=InnoDB;
Но на самом деле вам не нужно уникальное ограничение даже в таблице Person
, потому что person_id
уже само по себе уникально. Нет никакого способа, которым данное person_id
могло бы сослаться на две компании.
Так что я не уверен, какую проблему вы пытаетесь решить.
Ваш комментарий:
Это не решает проблему того, что одно и то же имя пользователя может существовать в разных компаниях.
То есть вы хотите, чтобы данное имя пользователя было уникальным в пределах одной компании, но могло бы использоваться в разных компаниях? Это было не ясно мне из вашего первоначального вопроса.
Так что если у вас нет других атрибутов, специфичных для пользователей, я бы объединил пользователя с персоной и добавил бы столбец "is_user
". Или просто полагаться на то, что неявно верно, что Персона с ненулевым криптопазом по определению является Пользователем.
Тогда ваша проблема с ограничениями кросс-таблицы UNIQUE
исчезнет.