1

Мне было интересно, какой был лучший подход для моего дизайна базы данных/таблиц. Как показывают на картинке, у меня есть игроки, которые играют в матч. Один игрок играет несколько совпадений, и одно совпадение воспроизводится несколькими игроками, поэтому это отношение n: m. Это может привести к тому, что игрок таблицы (id, firstname), player_to_match (playerid, matchid), match (id) будет проигрывать стоп-листы. В моем случае количество игроков никогда не меняется, оно всегда два (n = 2). Какой из следующих вариантов лучше?Разработка и нормализация базы данных в шахматах

(1)

player_to_match (matchid, playerid)

Имея два ряда для каждой ячейки избыточности и карты одного (matchid)

(2)

матча (matchid, playerid1 , playerid2)

Как я уже сказал, количество игроков в матче никогда не изменится

Спасибо

Лукаса

[МКИ-Диаграмма с двумя субъектами: Игрок (ID, Firstname), Match (ID), п: м Ассоциации от игрока в матче под названием "пьесу"] http://fs1.directupload.net/images/141210/rmeuutpg.png

+0

Ваше мнение о наличии «избыточности ячеек» неверно. Простое появление значения несколько раз в столбце или таблице не имеет ничего общего с избыточностью. См. [This] (http://stackoverflow.com/a/27809411/3404097). – philipxy

ответ

1

Я бы придерживался опции (1). Это упростит ответ на такие простые вопросы, как «сколько матчей играет игрок X?» С помощью опции (2) вам придется запросить два столбца для значения X, чтобы ответить на этот вопрос, и это начинает становиться уродливым.

+0

Действительная точка. Это действительно зависит от ваших общих целей. Если вам не нужен этот тип анализа, сохраните усилия по управлению промежуточной таблицей. –

+0

@PhillipXT Я всегда был «нормализуем, пока не болит, денормализовать, пока он не станет работать». Прямо сейчас, я не могу найти никакой необходимости или пользы для денормализации опциона (2). –

+0

"Сколько матчей играет игрок X?" я определенно буду отвечать на вопрос в своем проекте – Beginner

0

Используйте дизайн из 2 столов. Для чего-то подобного вам не нужна дополнительная сложность, потому что нет шансов, что в шахматы когда-нибудь понадобятся 3 игрока. Если вы не смотрите Теорию Большого Взрыва ...

Я предпочитаю начать с более простой формы, а затем изменить ее позже, если это необходимо. Как разработчики, мы стараемся придумать решение, которое будет обрабатывать любую будущую возможность, но большую часть времени это никогда не происходит, и мы потратили много времени на создание элегантного решения проблемы, которая не существует , Сначала сделайте простой.

Если вам нужна опция из трех таблиц, у вас есть дополнительная работа, чтобы убедиться, что в матче всегда есть две связанные записи, не более, не менее. Убедитесь, что вы не можете удалить пользователя, прикрепленного к существующему совпадению, или у вас будет матч только с одним игроком. Несколько вещей, которые вы должны будете соблюдать.

0

Я хотел бы сделать это:

matchid 
black (references PLAYER) 
white (references PLAYER) 

Количество игроков в игре, конечно (два), что исключает основания для ребенка таблицы 1-к-п; каждый игрок, кроме того, имеет определенную «роль» (белый против черного), и вы хотели бы иметь возможность различать их таким образом.

+0

Зачем вам это делать? Просьба уточнить, отредактировав свой ответ. (LQRQ) –

+0

в моем случае я никогда не буду различать двух игроков, чтобы не было никакой дополнительной информации из столбцов двух игроков. – Beginner

+0

Не уверен, что вы имеете в виду, @Beginner, что вы «никогда не будете различать двух игроков». Вы говорите, что не хотите знать, какой игрок был черным и который был белым в конкретной игре? – Tim