**仅使用常规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
答案 0 :(得分:2)
尝试让您的餐桌像
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 :(得分:1)
您需要使用表'Scores'连接两个表'Dogs'和'Events',然后可以获得所需的信息。 它将类似于以下内容:
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语句进行了必要的更改,并更正了数据类型和某些语法问题。 该查询将获取狗的名字以及比赛,他们参加的比赛以及他们在那次比赛中获得的分数。
答案 2 :(得分:1)
我喜欢单表名称。我也喜欢在所有表格中添加一个id作为通用模式。像您想要的那样做。
我不确定某些点,例如我们是否需要跟踪不同的比赛(我假设是的,因为假设要跟踪的比赛不止一个,因为他们说“对于每个比赛”),以及是否可以在一组比赛中共享一组事件(我只对每个比赛的事件进行建模,而没有在所有比赛中都重复使用事件列表,如果比赛之间存在共同事件,例如“更快的跑者”,这也会很有趣。)
以下是基于以下假设进行建模的要点:
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;