thing(thing_id, pers_id, slot_id, ...) таблица шмоток персонажа. Кому принадлежит, в какой слот одета NULL - шмотка не одета
slot_ref(slot_id, title) справочник шмоток
pers(pers_id, ...) персонажи
При одевании шмотки в слот персонажа, заполняется поле slot_id шмотки
Есть мысль (но она мне не нравится) вынести одевание шмотк в отдельную таблицу.
dressed_thing(thing_id, slot_id, pers_id) одетые шмотки это мизерная часть от общей массы. Может поле slot_id и лишнее в таблице шмоток. Выборка одетых шмоток - это очень популярный запрос. Напрягает ещё один join в запросах. (поэтому и pers_id сюда добавил, который дублирует ссылку thin.pers_id
Подскажите, пжлст, как сохранить целостность данных?
Ещё идея, но она мне кажется изратной :)
Сделать доп поле вычисляемое f(slot_id, pers_id) и на него повесить ограничение уникальности. pers_id * 100 + slot_id для снятых шмоток будет NULL, для одетых - уникальное для каждого перс/слот значение
slot_ref(slot_id, title) справочник шмоток
pers(pers_id, ...) персонажи
При одевании шмотки в слот персонажа, заполняется поле slot_id шмотки
-- Ограничение на два поля, где одно может быть NULL не работает ALTER TABLE THING ADD CONSTRAINT UNQ1_THING UNIQUE (PERS_ID,SLOT_ID) Problematic key value is ("PERS_ID" = 49, "SLOT_ID" = NULL).
Есть мысль (но она мне не нравится) вынести одевание шмотк в отдельную таблицу.
dressed_thing(thing_id, slot_id, pers_id) одетые шмотки это мизерная часть от общей массы. Может поле slot_id и лишнее в таблице шмоток. Выборка одетых шмоток - это очень популярный запрос. Напрягает ещё один join в запросах. (поэтому и pers_id сюда добавил, который дублирует ссылку thin.pers_id
Подскажите, пжлст, как сохранить целостность данных?
Ещё идея, но она мне кажется изратной :)
Сделать доп поле вычисляемое f(slot_id, pers_id) и на него повесить ограничение уникальности. pers_id * 100 + slot_id для снятых шмоток будет NULL, для одетых - уникальное для каждого перс/слот значение