2012-03-26 2 views
1

저는 City 모델을 가지고 있고 모든 도시에는 CombatUnit 모델에 지정된 전투 유닛이 있습니다. 처음에는 city_combat_units 협회를 통해 많은 것을 만들었지 만, 이것이 실제로 가장 좋은 방법인지 확실하지 않습니다.별도의 모델을 직렬화하거나 사용 하시겠습니까?

(city_id, combat_unit_id, number) => (1,1,10) 
(city_id, combat_unit_id, number) => (1,2,4) 
(city_id, combat_unit_id, number) => (1,3,9) 

당신은 아이디어를 얻을 : 전투 단위의 10 개 가지 유형이 있기 때문에

같은 중복 많이있다. 그래서 궁금합니다. City가 하나의 combat_units_list를 가지도록하는 것이 더 낫습니다. 여기서 list 속성은 유닛의 이름과 숫자가 포함 된 일련 화 된 해시 일뿐입니다.

좋은 생각이십니까? 다목적일까요?

답변

1

일반적으로 나는 당신이 현재의 모델을 고수하고 도시와 전투 유닛 간의 관계를 쉽게 조작 할 수 있다고 제안합니다. 예, ID의 사소한 중복이 있지만, 제안한대로 직렬화 된 목록을 갖는 것보다 훨씬 깔끔합니다.

또한 테이블에 매핑 된 관계가 도움이되는 몇 가지 시나리오를 그림으로 나타낼 수 있습니다. 예를 들어, 몇 개의 도시에 유형 2의 전투 유닛이 10 개 있는지 알아야하는 경우,이 설정을 현재 설정으로 응답하면 꽤 똑 바릅니다. 앞으로, 다른 솔루션은 모든 도시에 대한 목록을 구문 분석 한 다음 질문에 대답하기위한 알고리즘을 찾아야 함을 의미합니다.

데이터베이스에 일부 바이트를 저장하지만 쿼리 논리로 코드를로드 할 것입니다 (사용자가 요청할 경우 db 엔진의 책임 성임).

요약하면 에 일종의 이상한 최적화를 위해 직렬화 옵션이 필요하다면, 나는 당신의 테이블을 고집하는 것이 좋습니다.

1

직렬화 된 속성은 가져 오는 것이 더 빠를 수 있지만 변경하는 것이 훨씬 느립니다. 큰 목록에 항목을 추가하려면 새로운 항목이 추가 된 전체 목록을 다시 작성해야합니다. 또한 한 업데이트가 다른 업데이트에 의해 덮어 쓰기 될 수있는 경쟁 조건으로 인해 어려움을 겪습니다. 조인 모델은 거의 항상이 작업을 수행하는 가장 신뢰할 수있는 방법입니다.

직렬화 된 목록의 성능을 원할 경우 조인 레코드를 캐시로 만들어 손상된 경우 다시 작성할 수 있도록하십시오. 조인 모델을 작성하는 것은 일반적으로 쉬운 일이 아니며 예에서 number과 같은 메타 데이터를 쉽게 수용 할 수 있습니다.

관련 문제