2013-01-31 2 views
-1

자동차 경주 게임을 설계하는 단계에 있습니다. 각 사용자는 최대 100 대의 자동차를 소유 할 수 있습니다. 각 차량의 데이터는 내 자동차 테이블에있는 레코드 내에 저장됩니다. 표의 필드는 다음과 같습니다.많은 사용자가 사용할 수있는 간단한 데이터베이스 디자인

- 여기서 user_id는 자동차 소유자의 외래 키 매핑입니다.

내 질문 : 모든 사용자의 자동차를 단일 테이블에 저장하는 것이이 간단한 디자인에서 괜찮습니까? 이 앱이 성공적이며 약 100 명의 사용자가 각각 100 대의 자동차를 보유하고 있다고 가정 해 보겠습니다. 그것은 내 차 테이블에 1,000,000 개의 레코드가 될 것입니다. 실적과 관련하여 문제가 있습니까? 데이터베이스 디자인을 통해 성능을 향상시킬 수 있습니까?

마지막으로 DBMS로 MySQL을 사용할 계획입니다.

+0

예. 괜찮아. 그냥 좋은 인덱스가 있는지 확인하십시오. – Kermit

+0

인덱스를 인덱스에 추가합니다. – dmaij

+0

아이디가 '0'~ '100'인 자동차가 있다고 가정합니다. 자동차 ID # 5는 각 플레이어에 대해 동일한 사양을 갖습니까? 이 경우 모든 사용자에 대해 단일 자동차 테이블을 가질 수 있고 사용자의 테이블에서 자동차 테이블에 연결하기 만 할 수 있습니다. – JakeParis

답변

1

동일한 테이블에 보관하십시오.

당신이 specific reason for a surrogate key이 없다면, 관계가 식별 할 ...

enter image description here

... 그 결과 자연 키 {user_id, car_no}cluster car 테이블. 이렇게하면 동일한 사용자가 소유 한 자동차가 에 물리적으로 닫히고이 데이터베이스에 저장되며 다음과 같은 쿼리가 제공됩니다. "주어진 사용자의 차량을 제공하십시오"는 매우 빠른 답변을 얻을 수 있습니다.


실제로 1 : N 관계 (M : N과 반대)가 실제로 필요한지 여부를 고려하십시오. 사용자가 자동차 (또는 적어도 자동차의 "일반적인 측면")를 공유합니까?

0

사용자가 많은 자동차 검색을 할 계획이라면 user_id에 색인을 추가하십시오. 그 외에도이 디자인을 최적화하는 명확한 방법은 없습니다.

+1

동일한 사양의 자동차를 사용하는 경우 실제로 매핑 테이블을 만들 수 있습니다. – Kermit

+0

그는 사용자가 자동차를 "소유"한다고 말했다. 사용자가 자동차 사양을 편집하지 않은 경우에만 매핑/조인 테이블을 사용합니다. –

+0

사용자가 자동차를 편집하면 해당 사양이있는 레코드에 할당됩니다. 왜 데이터를 복제합니까? – Kermit

관련 문제