1

내 데이터베이스/테이블 디자인에 대한 더 나은 접근 방법이 궁금합니다. 그림에 나와 있듯이, 나는 경기를하는 선수가 있습니다. 한 플레이어가 여러 개의 경기를하고 한 경기가 여러 명의 선수가 경기하기 때문에 n : m 관계입니다. 이로 인해 thress 테이블 플레이어 (id, firstname), player_to_match (playerid, matchid), match (id)가 발생할 수 있습니다. 필자의 경우 플레이어의 수는 절대로 변경되지 않으며 항상 2 명입니다 (n = 2). 다음 중 어떤 디자인이 더 좋습니까? (matchid)체스의 데이터베이스 설계 및 표준화

(2)

매치 (matchid, playerid1 각 맵과 하나의 셀 중복성 개의 행을 갖는

(1)

player_to_match (matchid, playerid)

, playerid2)

내가 말했듯이, 경기 당 선수의 수는 절대로 바뀔 수 없다.

0 [: 플레이어 (ID, 이름), 경기 (ID), N : 두 개의 엔티티와 ERM-도 플레이어에서 m의 Assosiation는 "놀이"라는 제목에 맞게]

당신에게

루카스

감사 http://fs1.directupload.net/images/141210/rmeuutpg.png

+0

"셀 이중화"가 있다고 생각하는 것은 오해입니다. 열이나 표에 값을 여러 번 표시하는 것은 중복성과 관련이 없습니다. [this] (http://stackoverflow.com/a/27809411/3404097)를 참조하십시오. – philipxy

답변

1

옵션 (1)을 사용하고 싶습니다. "얼마나 많은 경기가 얼마나 많은 선수가 경기를 했나요?"라는 간단한 질문에 쉽게 대답 할 수 있습니다. 옵션 (2)를 사용하면 X 값에 대해 두 개의 열을 쿼리하여 해당 질문에 대답해야하며 추한 결과가 발생합니다.

+0

유효한 포인트. 그것은 당신의 전반적인 목표가 무엇인지에 달려 있습니다. 이러한 유형의 분석이 필요하지 않은 경우 중개 테이블을 관리하는 노력을 줄일 수 있습니다. –

+0

@PhillipXT 필자는 항상 "상처를 입을 때까지 정상화하고 작동 할 때까지 비정규 화하는"작업을 더 많이 해왔습니다. 현재, 옵션 (2)의 비정규 화에 대한 필요성이나 이점을 찾을 수 없습니다. –

+0

"X 명이 얼마나 많은 경기를 했나요?" 내 프로젝트에서 분명히 대답 할 질문이 될거야 – Beginner

0

2 테이블 디자인을 사용하십시오. 이런 식으로 체스가 3 명의 선수를 필요로하는 기회가 없으므로 별도의 복잡성이 필요 없습니다. 빅뱅 이론을 보지 않으면 ...

더 간단한 양식으로 시작하여 나중에 필요하면 수정하십시오. 개발자로서 우리는 미래의 가능성을 처리 할 수있는 솔루션을 개발하려고하지만 대부분의 경우 결코 발생하지 않으며, 존재하지 않는 문제에 대한 우아한 솔루션을 구축하는 데 많은 시간을 낭비했습니다 . 먼저 간단히 가세요.

3 테이블 옵션이 필요한 경우, 2 개의 관련 레코드가 항상 일치하는지 확인해야합니다 (더 이상 필요 없음). 기존의 일치 항목에 첨부 된 사용자는 삭제할 수 없으며 하나의 플레이어 만 일치하게됩니다. 당신이 조심해야 할 몇 가지 사항이 있습니다.

0

내가 이런 짓을 했을까 :

matchid 
black (references PLAYER) 
white (references PLAYER) 

게임에서 플레이어의 수는 유한 1에-N 자식 테이블에 대한 이론적 근거를 제거 (이); 각 플레이어는 정의 된 "역할"(흰색 대 검은 색)을 가지고 있으므로 그러한 방식으로 구분할 수 있기를 원합니다.

+0

왜 이럴 수 있니? 답을 수정하여 명확히하십시오. (LQRQ) –

+0

제 경우에는 두 선수를 구별하지 않을 것입니다. 따라서 두 선수의 열에는 아무런 추가 정보도 없습니다. – Beginner

+0

@Beginner가 무슨 뜻인지 잘 모르 시겠지만 "두 선수를 구분하지 않으실 겁니다". 특정 게임에서 어떤 플레이어가 검은 색이었고 흰색 이었는지를 신경 쓰지 않는다고 말하는 것입니까? – Tim