Я создаю базу данных, которая должна работать на MySQL, PostgreSQL и SQLite. Одна из моих таблиц имеет первичный ключ из двух столбцов:
CREATE TABLE tournament (
state CHAR(2) NOT NULL,
year INT NOT NULL,
etc...,
PRIMARY KEY(state, year)
);
Я хочу ссылку на таблицу tournament
из другой таблицы, но Я хочу, чтобы эта ссылка была nullable . Вот как я могу это сделать, представив, что у победителя не обязательно будет турнир:
CREATE TABLE winner (
name VARCHAR NOT NULL,
state CHAR(2) NULL,
year INT NULL
);
Если state
равно нулю, но year
нет, или наоборот, таблица будет несовместимой. Я считаю, что следующее FOREIGN KEY
ограничение исправляет это:
ALTER TABLE winner ADD CONSTRAINT FOREIGN KEY fk (name, state) REFERENCES tournament (name, state);
Это правильный способ обеспечения согласованности? Правильно ли нормализована эта схема?