Для школьного задания мне нужно было создать базу данных по выбранному предмету. Я пошел с онлайновой стратегической игрой, сосредоточенной вокруг игроков, завоевывающих города других игроков (на основе существующей игры). Чтобы сохранить небольшой объем, это упрощенная версия. В эту тему я включил только часть, относящуюся к проблеме.
Сегодня мой учитель проверил базу данных и сказал, что у меня что-то не так, но я не понимаю, почему, вот в чем проблема.
Во-первых, краткое описание контекста базы данных: игрок может иметь несколько городов, а город всегда принадлежит одному игроку. Чтобы Игрок смог завоевать город, он должен начать восстание. Игрок может начать много восстаний, и в городе может быть много восстаний разных игроков. Всякий раз, когда игрок завоевывает город, есть победитель и побежденный игрок. Я думаю, что точный способ начала Восстания или завоевания города не имеет отношения к этой проблеме, поэтому я оставлю это в стороне.
Вот база данных, которую я создал. Код:
CREATE TABLE Players (
PlayerId INT PRIMARY KEY,
Name VARCHAR(50))
CREATE TABLE Cities (
CityId INT PRIMARY KEY,
PlayerId INT FOREIGN KEY REFERENCES Players(PlayerId),
Name VARCHAR(50))
CREATE TABLE Revolts(
CityId INT FOREIGN KEY REFERENCES Cities(CityId),
PlayerId INT FOREIGN KEY REFERENCES Players(PlayerId),
Startdate DATE,
Enddate DATE,
CONSTRAINT PK_Revolts PRIMARY KEY (CityId, PlayerId))
CREATE TABLE Conquests(
CityId INT FOREIGN KEY REFERENCES Cities(CityId),
ConqueringPlayerId INT FOREIGN KEY REFERENCES Players(PlayerId),
ConqueredPlayerId INT FOREIGN KEY REFERENCES Players(PlayerId),
Date DATE,
CONSTRAINT PK_Conquests PRIMARY KEY (CityId, ConqueringPlayerId, ConqueredPlayerId, Date))
И модель, сгенерированная из него.
Мой учитель сказал мне, что между игроками не может быть отношения 1: m и n: mи города. Она сказала мне, что я должен удалить одно из отношений, но я чувствую, что они нужны мне для решения проблемы. Она не могла объяснить мне альтернативный способ ее решения. Она также сказала, что это может вызвать проблемы при вставке данных.
Я почти уверен, что мне нужны такие отношения, чтобы решить мою проблему. Отношение Восстания к Игроку отличается от отношения между Городом и Игроком. Первый - Игрок, который начал Восстание, а второй - владелец Города. Они никогда не бывают одинаковыми, поскольку игрок не начинает восстание в своем собственном городе. Когда я вставил данные, проблем также не было.
Вот изображение данных. Я добавил 2 игрока и 3 города. Игроку 1 принадлежат города 1 и 3, после завоевания города 3 у игрока 2. Игроку 2 принадлежит город 2, в котором игрок 1 начал восстание.
Итак, правильное или неправильное отношение, какие проблемы могут возникнутьЯ ожидаю с этим отношением, и что было бы альтернативным решением, если это неправильно или проблематично?