Я занимаюсь некоторыми исследованиями и изучал эту математическую технику алгоритма многоугольника, чтобы помочь создать светильники для пяти боковых лиг. Я хотел бы, чтобы это было реализовано, используя, надеюсь, базовую технику. Что я приобретаю только сейчас список арматуре должен быть создан для пяти боковой лиги со следующими требованиями:Создание списка приборов с использованием математического подхода
- Есть 3 лиг с 5 команд в лиге
- Каждая команда играет друг с другом дома и на выезде в пределах своей собственной лиги
- каждого набор игр играют в круглом/неделе (например, круглые и спичек отображается в URL)
я настроил все команды и лиги, просто требует помощи светильники и ранее я использовал UNION и CROSS JOIN между таблицей «Team» и Таблица «Команда» (для определения домашних и гостевых команд), но теперь я хочу начать с нуля с помощью этого алгоритма. Я не хочу использовать вложенные циклы, я думаю, что это можно сделать с помощью набора базы, но просто требуется больше опыта разработчика, чтобы посмотреть, как они это сделают, и я считаю, что этот алгоритм может помочь.
Вот ссылка алгоритма: http://www.mathscareers.org.uk/article/football-fixtures-whats-score/
Thee схема для лиги, команды и арматуры таблицы выглядит следующим образом:
лига:
[LeagueID] TINYINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[LeagueName] VARCHAR(30) UNIQUE
Команда:
[TeamID] TINYINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[TeamAbbreviation] CHAR(3) UNIQUE,
[TeamName] VARCHAR(50) UNIQUE,
[LeagueID] TINYINT CONSTRAINT FK_Team_League FOREIGN KEY REFERENCES League(LeagueID)
Светильник:
[FixtureID] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[WeekNumber] INT NOT NULL,
[FixtureDate] DATE NULL,
[HomeTeamID] TINYINT NULL,
[AwayTeamID] TINYINT NULL,
[LeagueID] TINYINT CONSTRAINT FK_Fixture_League FOREIGN KEY REFERENCES League(LeagueID)
Надеюсь, что это помогает, ниже - существующая часть кода/логики, которую я использовал, если это не сработало, если вам нужна какая-либо ссылка (это не удавалось, потому что она проводила неделю 1-11 для домашних игр всей команды, что означает обратные крепления команды, когда они были в отъезде, никогда не были правильными, поскольку они будут играть в игры на той же неделе, что и их домашние игры). Вот почему я хочу изменить логику, чтобы следовать этому алгоритму многоугольника, но не знаю, как применить его с кодом.
CREATE PROCEDURE [dbo].[Fixture_Insert]
@StartFixtureWeek DATE
AS
SET NOCOUNT ON
BEGIN
INSERT INTO dbo.Fixture (WeekNumber, HomeTeamID, AwayTeamID, FixtureDate, LeagueID)
SELECT
ROW_NUMBER() OVER (PARTITION BY h.teamID ORDER BY h.TeamID, a.TeamID, h.LeagueID) AS WeekNumber,
h.TeamID,
a.TeamID,
DATEADD(day,(ROW_NUMBER() OVER (ORDER BY h.LeagueID)-1)*7,@StartFixtureWeek) AS FixtureWeek,
h.LeagueID
FROM dbo.Team h
CROSS JOIN dbo.Team a
WHERE h.TeamID <> a.TeamID
AND h.LeagueID = a.LeagueID
END
Спасибо, cimbali, что имеет смысл логически. Проблема, которую я буду иметь, это кодирование, поэтому я хотел бы знать, не возражаете ли вы, если мы сможем это пройти пополам (возможно, используя чат), чтобы я мог видеть и понимать, что делать? –
Отмеченный ответ, но не закодировал его, как указано, если вы не возражаете пройти со мной, как его закодировать, просто напишите мне комментарий. У меня будет активная активность, поэтому я знаю, что происходит –
@carlBrooks Извините, у меня нет большого количества времени прямо сейчас (плюс я не могу найти вас в чате). Попробуйте начать с написания процедуры, которая возвращает (или вставляет) светильники всего за один раунд, учитывая номер раунда.У вас есть все формулы для этого. – Cimbali