我需要回答以下说明,并且想知道我是否在正确的答案路径上。
说明
为以下情况设计数据库:您需要在敏捷性比赛中跟踪所有的狗。 他们在每次比赛中都有不同的比赛项目,每只狗都有每项比赛的得分。 另外,编写SQL查询以返回比赛中的所有狗,每只狗参加的比赛以及他们在该赛事中获得的分数。
CREATE DATABASE Competition (
Dogs CHAR(30) NOT NULL,
Score INT NOT NULL,
Event CHAR(30) NOT NULL,
)
SELECT *
FROM Competition
这似乎有点简单,但这是否可以满足所有给出的说明?
编辑
此解决方案行得通吗?
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)
您在语法中混淆了实体。数据库是逻辑容器,您可以在其中创建表。 例如,如果您使用的是T-SQL:
CREATE DATABASE DogCompetition;
USE DogCompetition;
CREATE TABLE Dogs
(Dog VARCHAR(30) PRIMARY KEY);
CREATE TABLE Events
(Event VARCHAR(30) PRIMARY KEY);
CREATE TABLE DogEventScores
(Dog VARCHAR(30) REFERENCES Dogs(Dog),
Event VARCHAR(30) REFERENCES Events (Event),
Score INT NOT NULL,
PRIMARY KEY (Dog, Event)
);
INSERT INTO Dogs (Dog) VALUES ('Charlie');
INSERT INTO Events (Event) VALUES ('Running');
INSERT INTO DogEventScores (Dog, Event, Score) VALUES ('Charlie', 'Running', 8);
SELECT * FROM DogEventScores;
HTH
答案 1 :(得分:1)
您应该像下面那样设计表格。
狗与竞争之间有许多关系,事件是中介者表。
Dog (DogId, DogName)
Event(DogId, CompetitionId, EventName, Score)
Competition(CompetitionId, Name)
查询返回比赛中的所有狗//返回所有比赛ID等于1的狗
select * from Dog inner join Event on Dog.DogId = Event.DogId where Event.CompetitionId = 1
每只狗参加的活动以及他们在该活动中获得的分数。
select Event.EventName, sum(Score) from Dog inner join Event on Dog.DogId = Event.DogId
where Dog.DogName = 'Misa' group by Event.EventName