Проектирование реляционных баз данных с MySQL - PullRequest
0 голосов
/ 05 мая 2011

В настоящее время у меня есть 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

Однако мне не всегда интересно извлекать данные о пользователях, монстрах или сокровищах.Иногда мне нужны только идентификатор позиции и местоположение - что означало бы для трех таблиц, я должен был бы сделать объединение.

Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 05 мая 2011

Пользователи, MonsterInstances, TreasureInstances можно переписать в виде одной таблицы «ObjectInstances», содержащей столбец типа.Тогда запросы, которые будут работать с этими тремя таблицами отдельно, вместо этого будут работать с ObjectInstances и typeID, ссылаясь на новую таблицу OjbectTypes.Имеет смысл?

...