문제

팀과 게임의 2 가지 데이터베이스 테이블이 있습니다.

이 질문의 목적을 위해, 우리는 축구 (축구) 팀과 게임을 다루고 있습니다.

각 게임에는 정확히 2 개의 팀, 일반적으로 홈 팀과 멀리있는 팀이 있지만 때로는 두 팀 모두 중립적 일 수 있습니다.

내 질문은 게임 테이블 (Home_team_id, Away_team_id)에서 2 개의 외국 키를 사용 하여이 데이터 관계를 대표 해야하는지 또는 Games_Teams 테이블과 함께 다수의 관계를 사용하여 두 가지를 연결 해야하는지 여부입니다. 또한 팀이 홈이든 멀리 떨어진 팀 이었는지 여부를 저장하기 위해서는 약간의 과잉처럼 보입니다.

혼란에 추가하기 위해 Kohanaphp의 ORM Libs를 사용하고 있으며 FK는 Team_ID라고하거나 링크 테이블이 2 개의 열만 포함되어있을 것으로 기대합니다. Kohanaphp 에서이 문제에 대한 경험이 있다면 답장을 남겨주세요. 그렇지 않으면 일반적인 조언도 감사합니다.

도움이 되었습니까?

해결책

데이터베이스 서버에서 "xth 정상 양식"배지를 고정하려면 아마도 다수로 취급 될 것입니다. 그렇지 않으면 쿼리 오버 헤드를 1 개의 테이블로 줄여야한다고 생각해야합니다. 당신은 그냥 가입 할 것입니다 모든 유용한 데이터를 원하는 시간입니다.

다른 팁

두 열만 사용하면 Joiner 테이블에서 자격을 갖추면됩니다. 마치 이것이 잠자는 타임 폭탄 인 것처럼 보이지 않으며 갑자기 언젠가는 많은 사람들에게 많은 사람들이 필요하다는 것을 알게 될 것입니다.

제 생각에는 2 개의 열이 여기에 완벽하게 적합합니다. 두 개의 열이있는 경우 모든 게임에 대해 두 팀이있을 수 있다는 사실은 데이터베이스 스키마에 반영됩니다. 링크 테이블을 소개하면 단일 게임에 2 개의 홈 팀, 2 개의 멀리 떨어진 팀이있을 수있는 가능성을 소개 하며이 시나리오가 결코 일어나지 않도록 추가 검증이 필요합니다. 두 열에 물건을 격리시켜 스키마는 본질적으로 데이터 무결성을 시행합니다.

정규화 측면에서 : 예. 하나 이상의 일대일 관계로 분해되는 일대일 또는 다수가 있습니다.

그러나 현실적으로 말하면, 내가 성별과 같은 것을 구하려면. 이것에 첨부 된 다중 상태와 DateTime 스탬프가 정말로 필요합니까?

놀라운 대답은 예입니다. 그러나 비즈니스 이유로 성별 변경을 추적 해야하는 경우에만 대답은 아니요입니다.

나는 두 개의 키로 하나의 테이블을 유지할 것입니다.

당신이 그것을 어떻게 추상화했는지에 따라 축구 게임에는 두 팀이 있어야한다고 말할 것입니다.이 경우 게임 테이블에 열이 더 편리 할뿐만 아니라 더 정확합니다.

팀 ID가 게임의 주요 키의 자연스러운 부분이라고 상상할 수도 있습니다.

이것에 대한 별도의 테이블이 없어야한다고 생각하십시오. 프로그래머가 더 쉽고 DB에서 더 쉽습니다. IFS에 대해 생각하는 것이 좋지만 이미 가지고있는 것처럼 들립니다. 정규화는 항상 모든 것을 위해가는 길이라고 생각하지 마십시오.

나는 두 열을 사용하는 것이 최선의 선택이지만 Kohana에서 ORM 라이브러리를 사용하고 있다고 언급하면서 다른 사람의 답변을 존중합니다. 게임 테이블에 두 개의 열을 사용하면 ORM 기능을 잃어 버립니다. Games_Teams Pivot 테이블을 설정하면 다음을 수행 할 수 있습니다.

$game = ORM::factory('game', 1); // 1 is the game id

그런 다음 해당 게임에서 팀을 살펴볼 수 있습니다.

foreach ($game->teams as $team) {
// do stuff with $team
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top