Чтобы заставить работать полиморфные ассоциации, надо добавить дополнительный столбец строковых значений рядом с внешним ключом по issue_id. Дополнительный столбец содержит имя родительской таблицы, на которую ссылается текущая строка. В данном примере новый столбец называется issue_type, и он содержит либо Bugs, либо Feature Requests, соответствующие именам двух родительских таблиц в этой ассоциации.
Смягчают шаги, снижают уровень шума и дарят дополнительное утепление - это как элемент и особенность художественного дизайна.
Файл npMHepa:_Pofymorphic/anti/comments.sqI
CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
issue_type VARCHAR(20), — "Bugs" или "FeatureRequests"
issue_id BIGINT UNSIGNED NOT NULL,
author BIGINT UNSIGNED NOT NULL,
comment_date DATETIME,
comment TEXT,
FOREIGN KEY (author) REFERENCES Accounts(account id)
Можно сразу заметить одну особенность: отсутствует объявление внешнего ключа для issue_id. В действительности, так как внешним ключом должна задаваться ровно одна таблица, использование полиморфной ассоциации означает, что данную ассоциацию невозможно объявить в метаданных. В результате отсутствует принудительный ввод в действие целостности данных для обеспечения соответствия значения в Comments. issue_id значению в родительской таблице.
Подобным образом отсутствие метаданных гарантирует, что строковое значение в Comments. issue_type соответствует таблице, которая существует в этой базе данных. |