SQL - создать таблицу и запрос - правильно? - PullRequest
0 голосов
/ 20 марта 2019

** Будет ли это решение правильным только при использовании обычного SQL? **

Разработка базы данных для следующего сценария: Вам необходимо отслеживать всех собак на соревнованиях по ловкости.У них есть разные события для каждого соревнования, и у каждой собаки есть оценка по каждому соревнованию.Кроме того, напишите SQL-запросы, чтобы вернуть всех собак в соревновании, события, в которых участвует каждая собака, и счет, который они получили в этом событии.

CREATE TABLE Dogs (
  Name STRING,
  EventId INT
)
CREATE TABLE Events (
  Name STRING,
  Id INT
)
CREATE TABLE Scores (
  Score INT,
  EventId INT
)
SELECT name
FROM Dogs 
INNER JOIN Events On Events.Id = Dogs.EventId
INNER JOIN Scores On Events.Id = Scores.Event.Id

Ответы [ 3 ]

2 голосов
/ 20 марта 2019

Попробуйте ваши таблицы, чтобы быть похожими на

CREATE TABLE Dogs ( Name STRING, DogId INT ) CREATE TABLE Events ( Name STRING, EventId INT ) CREATE TABLE Scores ( Score INT, ScoreId INT ) CREATE TABLE dog_Event ( dogid INT, ScoreId INT ) CREATE TABLE Score_Event( EventId INT, ScoreId INT )

Присоединяйся ко всем из них!

1 голос
/ 20 марта 2019

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

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

Вот пример для моделирования на основе этих допущений:

dog
---
id
name

competition
-----------
id
date
name

competition_event
-----------------
id
competition_id
name

/* note: we could make a different event (or event_type) table 
and just use event_id (or event_type_id) in the competition_event table 
if we want to share events among competition... 
would be useful to do stat on stuff like "faster runner" across all competitions */

dog_competition_event_score
---------------------------
id
competition_event_id
dog_id
score

Тогда для запроса он должен выглядеть примерно так:

SELECT *
FROM dog d
JOIN dog_competition_event_score dces ON dces.dog_id = d.id
JOIN competition_event ce ON ce.id = dces.competition_event_id
JOIN competition c ON c.id = ce.competition_id;
1 голос
/ 20 марта 2019

Вам необходимо соединить две таблицы «Собаки» и «События» с помощью таблицы «Счета», после чего вы сможете получить нужную информацию. Это было бы что-то вроде следующего:

   CREATE TABLE Dogs (
    Name varchar(45),
    Id INT
    );

CREATE TABLE Competition (
  Name varchar(45),
  Id INT
);

CREATE TABLE Events (
  Name varchar(45),
  Id INT,
  CompetitionId INT
);

CREATE TABLE Scores (
  DogId INT,
  Score INT,
  EventId INT
);

SELECT Dogs.name DogName,Competition.Name CompetitionName,Event.name EventName,Scores.Score
FROM Dogs
    INNER JOIN Scores On Dogs.Id = Scores.DogId
    INNER JOIN Events On Events.Id = Scores.EventId
    INNER JOIN Competition on Events.CompetitionId=Competition.Id;

Отредактировано : я добавил таблицу Competition, внес необходимые изменения в оператор select и исправил типы данных и некоторые синтаксические проблемы. В этом запросе будут указаны имена собак, участвующих в соревнованиях, а также соревнования, в которых они участвовали, и оценка, которую они получили на этом соревновании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...