Дублирование столбцов в модели наследования - PullRequest
0 голосов
/ 24 января 2012

У меня есть две таблицы, которые моделируют отношения наследования. Это выражается ограничением внешнего ключа на Derived.Id ссылкой Base.Id. Некоторые столбцы в Base по сути дублируются в Derived, поэтому на них можно ссылаться в уникальных ограничениях и составных внешних ключах. Я хотел бы убедиться, что значения для этих столбцов одинаковы в обеих таблицах. В идеале это можно сделать с помощью составного внешнего ключа в столбце Id +. Но это предотвращает изменение значений - это сценарий уловки-22.

Как я могу убедиться, что эти столбцы имеют одинаковые значения в обеих таблицах и позволяют их обновлять? У меня есть полная гибкость, поэтому я могу изменить схемы таблиц или сделать все, что необходимо, чтобы сделать это возможным.

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Вместо того, чтобы иметь 2-ю таблицу, я бы просто поместил все столбцы, которые нужны Derived, внутри таблицы Base и установил бы эти столбцы обнуляемыми.Если вы также добавите столбец дискриминатора, чтобы определить, представляет ли конкретная запись объект Base или объект Derived, все настроено.

Вы можете установить любые необходимые ограничения и не делатьприходится иметь дело с синхронизацией дублирующихся данных, поэтому единственная таблица на иерархию является методом по умолчанию, который Hibernate (и NHibernate) использует для отображения наследования.

0 голосов
/ 24 января 2012

Я бы оставил столбцы только в одной из таблиц, base, если это применимо ко всем объектам. Можете ли вы привести пример необходимости дублирования ваших столбцов с конкретным примером, например base = car, имеет VIN, output = myCar, имеет VIN.

Также, если дублированные столбцы являются частью ключей, используйте каскадное обновление.

...