2013-10-18 2 views
3

라운드 로빈 토너먼트를 개발 중이며 데이터베이스 설계 방법에 문제가 있습니다.라운드 로빈 토너먼트 용 데이터베이스 설계 방법

처음에는 계절이 있습니다. 시즌에는 토너먼트 목록이 포함되어 있습니다. 토너먼트에는 그룹 목록이 포함되어 있습니다. 그룹에는 목록 참여자가 있습니다. 그럼 나는 선수 목록을 가지고있다. 플레이어와 참가자 사이에 다른 점은 참가자가 그룹에 속한 등록 된 플레이어라는 것입니다. 그런 다음 참가자 2 명과 점수에 의해 정의되는 엔티티 게임이 있습니다. 그래서 참가자는 게임 목록을 가지고 있습니다.

P = 참가자 G = 게임

P1 P2 P3 
P1 X G1 G2 
P2 G3 X G4 
P3 G5 G6 X 

내 대회이 좋은 모델인가? 나는 내 DB에 이중성이 있기 때문에 그렇게 생각하지 않는다. G1은 G3의 단지 그 반대하지만 난 당신이 당신이 당신의 디자인을 다시 방문 할 필요가 이중성을 말한다면

-- -------------------------------------------------------- 

-- 
-- Table structure for table `GAME` 
-- 

CREATE TABLE IF NOT EXISTS `GAME` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `HOME_PARTICIPANT_ID` int(11) NOT NULL, 
    `AWAY_PARTICIPANT_ID` int(11) NOT NULL, 
    `HOME_SCORE` int(4) DEFAULT NULL, 
    `AWAY_SCORE` int(4) DEFAULT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `HOME_PARTICIPANT_ID` (`HOME_PARTICIPANT_ID`), 
    KEY `AWAY_PARTICIPANT_ID` (`AWAY_PARTICIPANT_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `GROUPS` 
-- 

CREATE TABLE IF NOT EXISTS `GROUPS` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NAME` varchar(255) NOT NULL, 
    `TOURNAMENT_ID` int(11) NOT NULL, 
    PRIMARY KEY (`ID`), 
    UNIQUE KEY `NAME` (`NAME`,`TOURNAMENT_ID`), 
    KEY `TOURNAMENT_ID` (`TOURNAMENT_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `PLAYER` 
-- 

CREATE TABLE IF NOT EXISTS `PLAYER` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `SURNAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `CLUB` varchar(255) DEFAULT NULL, 
    `USER_ID` int(11) NOT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `USER_ID` (`USER_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `PARTICIPANT` 
-- 

CREATE TABLE IF NOT EXISTS `PARTICIPANT` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `POINTS` int(4) NOT NULL DEFAULT '0', 
    `RANK` int(4) DEFAULT NULL, 
    `GROUP_ID` int(11) NOT NULL, 
    `PLAYER_ID` int(11) NOT NULL, 
    `SCORE` varchar(10) NOT NULL DEFAULT '0:0', 
    PRIMARY KEY (`ID`), 
    KEY `PLAYER_ID` (`PLAYER_ID`), 
    KEY `GROUP_ID` (`GROUP_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 


-- -------------------------------------------------------- 

-- 
-- Table structure for table `SEASON` 
-- 

CREATE TABLE IF NOT EXISTS `SEASON` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NAME` varchar(255) NOT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `USER_ID` (`USER_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `TOURNAMENT` 
-- 

CREATE TABLE IF NOT EXISTS `TOURNAMENT` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NAME` varchar(255) NOT NULL, 
    `SEASON_ID` int(11) NOT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `SEASON_ID` (`SEASON_ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;  


-- 
-- Constraints for table `GAME` 
-- 
ALTER TABLE `GAME` 
    ADD CONSTRAINT `GAME_ibfk_1` FOREIGN KEY (`HOME_PARTICIPANT_ID`) REFERENCES `PARTICIPANT` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `GAME_ibfk_2` FOREIGN KEY (`AWAY_PARTICIPANT_ID`) REFERENCES `PARTICIPANT` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; 

-- 
-- Constraints for table `GROUPS` 
-- 
ALTER TABLE `GROUPS` 
    ADD CONSTRAINT `GROUPS_ibfk_1` FOREIGN KEY (`TOURNAMENT_ID`) REFERENCES `TOURNAMENT` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; 


-- 
-- Constraints for table `PARTICIPANT` 
-- 
ALTER TABLE `PARTICIPANT` 
    ADD CONSTRAINT `PARTICIPANT_ibfk_1` FOREIGN KEY (`GROUP_ID`) REFERENCES `GROUPS` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE, 
    ADD CONSTRAINT `PARTICIPANT_ibfk_2` FOREIGN KEY (`PLAYER_ID`) REFERENCES `PLAYER` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE;  


-- 
-- Constraints for table `TOURNAMENT` 
-- 
ALTER TABLE `TOURNAMENT` 
    ADD CONSTRAINT `TOURNAMENT_ibfk_1` FOREIGN KEY (`SEASON_ID`) REFERENCES `SEASON` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE; 

답변

1

이 모델이 더 나은 구현하는 방법에 대해 아무 생각이 없다. 향상된 관계 다이어그램을 사용해 본 적이 있습니까? 이것은 올바른 데이터베이스 디자인을 가지고 있는지 확인하는 좋은 도구입니다. 토너먼트는 http://users.csc.calpoly.edu/~jdalbey/205/Lectures/HOWTO-ERD.html

+0

나는 향상된 관계 다이어그램이 무엇인지 알지 못합니다. 나는 너의 욕망을 쓸 것이다 – hudi

-1

단지 이진 트리된다

이것은 당신이하기 전에이 작업을 수행하지 않은 경우에 당신을 도울 수있는 좋은 웹 사이트입니다. 중첩 세트 또는 인접성 목록을 사용할 수 있습니다.

+0

흠 나는 너를 줄이지 않는다. 왜 라운드 로빈 토너먼트가 바이너리 트리인지 모르겠다. – hudi

+0

그것은 거꾸로되어있다. 우승자는 뿌리입니다. 다른 정보가있는 경우 중요합니다. – Bytemain

+0

하지만 여기서는 플레이가 없습니다. 나는 라운드 로빈 토너먼트가있다. – hudi

관련 문제