В настоящее время у меня есть 3 таблицы,
Users (Id, PositionId)
MonsterInstances (Id, PositionId)
TreasureInstances (Id, PositionId)
и 1 таблица позиций.
Positions (Id, Coordinate, TypeId)
PositionId в моих 3 таблицах - это внешние ключи в моей таблице Position.
Я хочу использовать одну таблицу Позиций, как показано выше, для нормализации всех моих данных о положении.Проблема, с которой я сталкиваюсь, заключается в том, что я должен идентифицировать тип, чтобы при выполнении запроса он знал, к какой таблице следует запрашивать.
Например,
SP -- GetObjectByPosition (positionId)
IF TypeId = 1
SELECT * FROM Users JOIN... WHERE PositionId = positionId
ELSE IF TypeId = 2
SELECT * FROM MonsterInstances JOIN...
Это кажется мне плохим дизайном.Единственный способ обойти это - иметь 3 отдельные таблицы.
UserPositions
MonsterInstancePositions
TreasureInstancePositions
Однако мне не всегда интересно извлекать данные о пользователях, монстрах или сокровищах.Иногда мне нужны только идентификатор позиции и местоположение - что означало бы для трех таблиц, я должен был бы сделать объединение.
Есть ли лучший способ сделать это?