Это проблема с использованием целых чисел для первичных ключей. У вас есть несколько решений, которые вы можете использовать.
Истинный уникальный идентификатор для любой данной строки для Клиента, Компании, Метра, Чтения является UUID. Может быть, из-за структуры базы данных первичный ключ должен быть целым числом, но это нормально. Это означает, что вам никогда не нужно добавлять поля в таблицу COMMENTS, если у вас есть новый тип в вашей системе. Он всегда будет ссылаться на типы ID.
Ваши таблицы могут выглядеть так:
CUSTOMER
ID UUID
COMPANY
ID UUID
METER
ID UUID
COMMENTS
ID
RELATED_TO UUID
COMMENT TEXT
Теперь вы можете прикреплять комментарии к любой таблице с уникальным идентификатором.
Если вы хотите поддерживать ссылочные ограничения
OBJECT - это таблица, в которой хранятся все идентификаторы всех фрагментов данных, имеющихся в вашей системе. Мы действительно начинаем создавать систему, в которой вы можете связать любой комментарий с чем угодно. Это может не подходить для вашего дизайна.
OBJECT
ID UUID
CUSTOMER
ID UUID
FOREIGN_KEY (ID) REFERENCES OBJECT(ID) ON DELETE CASCADE
COMPANY
ID UUID
FOREIGN_KEY (ID) REFERENCES OBJECT(ID) ON DELETE CASCADE
METER
ID UUID
FOREIGN_KEY (ID) REFERENCES OBJECT(ID) ON DELETE CASCADE
COMMENTS
ID
RELATED_TO UUID
COMMENT TEXT
FOREIGN_KEY (RELATED_TO) REFERENCES OBJECT(ID) ON DELETE CASCADE
Это усложняет конструкцию, чтобы гарантировать, что вам не нужно добавлять 2 таблицы для каждого нового типа в системе. У каждого дизайна есть свои жертвы. В этой статье вы усложняете задачу, говоря для каждой записи, будь то Компания, Клиент, Метр. Мне нужен связанный идентификатор в таблице объектов, чтобы я мог добавить внешний ключ.