Данное решение устраняет потребность в столбце Comments. issue_type. Теперь метаданные могут принудительно устанавливать целостность данных, вместо того чтобы полагаться на код приложения для управления ассоциациями без ошибок.
Установка светофоров
Недостаток данного метода заключается в том, что оно разрешает ассоциации, которые могут быть нежелательными. Обычно таблицы пересечений моделируют ассоциации «множество-множество», так что это позволяет связать заданный комментарий с несколькими ошибками или несколькими запросами функций. Однако может потребоваться, чтобы каждый комментарий относился только к одной ошибке или одному запросу функции. Можно ввести в действие по крайней мере часть данного правила, объявив ограничение UNIQUE ПО столбцу comment_id для каждой таблицы пересечений.
Файл npимepa:_Polymorphic/soln/reverse-unique.sql
CREATE TABLE BugsComments (
issue_id BIGINT UNSIGNED NOT NULL,
comment id BIGINT UNSIGNED NOT NULL,
UNIQUE KEY (comment_id) ,
PRIMARY KEY (issue_id, comment_id),
FOREIGN KEY (issue_id) REFERENCES Bugs(issue_id),
FOREIGN KEY (comment_id) REFERENCES Comments(comment_id)
Это гарантирует, что на заданный комментарий может быть только одна ссылка в таблице пересечений, которая, естественно, предотвращает связь с несколькими ошибками или несколькими запросами функций. Однако метаданными не запрещается однократная ссылка на заданный комментарий в обеих таблицах пересечений, связывающих комментарий как с ошибкой, так и с запросом функции. Возможно, это не то, что требуется, но защита от такого алгоритма по-прежнему должна обеспечиваться кодом приложения. |