Имя этого отношения называется Модель значения атрибута объекта (EAV). В вашем случае Tenant
, TenantVariable
, TenantValues
- это таблицы сущностей, атрибутов и значений соответственно. EAV - это попытка разрешить определение или сущности во время выполнения, и больше всего я нашел в моем опыте поддержки систем управления контентом. Она была названа моделью базы данных anti pattern , потому что вы теряете некоторые преимущества СУБД, в то же время получая такие недостатки, как необходимость блокировки нескольких таблиц при удалении или сохранении. Часто подходящей альтернативой персистентности является решение NoSQL, такое как Couch .
Что касается правок, то парадигма, которую я обычно вижу, это удаление всех записей значений для данного идентификатора и вставка в цикл, а затем обновление записи таблицы сущностей. Сделайте это внутри транзакции, чтобы обеспечить согласованность . Результатом этого подхода является то, что его проще понять, чем алгоритм обнаружения дельты. Другой вариант - использование оператора MERGE, если ваша база данных поддерживает его.