2012-07-31 3 views
0

데이터베이스 디자인에 대한 조언을 찾고 있습니다.symfony2의 엔티티 및 데이터베이스 디자인

symfony2 플랫폼에서 슬라이드 쇼 applicatino를 구성하고 있으며 4 가지 유형의 슬라이드 쇼 컨테이너 (회사, 지역, 속성 및 개별 모니터)가 있습니다. 이는 내용을 구성하고 내용을 상속하는 목적을위한 것입니다 (모니터는 속성에 있고 속성은 위치 영역 등의 일부입니다).

평면 PHP에서는 "컨테이너"와 "내용"이라는 두 테이블 만 사용하고 해당 컨테이너가 지리적 영역인지, 속성인지 등을 정의하는 컨테이너 테이블에 유형 필드를 넣었습니다. 각 내용 조각 (예 : 슬라이드)을 FK와 적절한 컨테이너에 연결하기 만하면됩니다.

심포니 2의 엔티티 시스템에 대해 배우면 다른 컨테이너 유형을 별도의 엔티티로 정의하여 대신 지리적 영역을 가져올 수 있고 자동적으로 반환 될 수 있습니다. 모든 하위 오브젝트 (모든 특성 및 차례로 해당 특성에 속하는 모든 모니터)를 즉시. 그러나 나는 다른 콘테이너들과 다른 콘테이너 타입들 사이에서 콘텐트 조각의 "소속"을 바꿀 수 있기를 원한다. 이것은 4 가지 서로 다른 entiy 유형 중 하나에 "속하는"능력을 가져야 만하는 경우 컨텐트 부분의 관계 (FK)에 문제가 발생할 가능성이 높다는 것을 알고, 설명 된 접근법으로 다소 털이 없을 것이라고 생각합니다.

symfony2 세계에서 노련한 사람이 여기까지 진행하는 가장 현명한 길을 가르쳐 줄 수 있습니까? 우리의 프로젝트에서

+0

내가 먼저 보자 ... 당신은 비즈니스 지향적 인 방식으로 비즈니스 모델을 생각해야한다. ase. 엔티티가 '컨테이너'라는 속성을 가지기를 원한다면 다른 유형이 될 수 있고 (다른 동작을 가짐) 클래스 상속 문제가 있습니다. 예를 들어, 자식'GeoArea'를 갖는 클래스'Container'가 필요합니다. 그런 다음 계층 구조를 데이터베이스에 매핑해야합니다. http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html – eagleoneraptor

답변

1

우리는 Propel 1.6PropelBundle를 사용

자사의 구문은 매우 개발자 친화적이다. Propel의 큰 장점 중 하나는 테이블 간의 "가짜"관계입니다. skipSql = true 플래그를 정의하여 스키마에서 FK 생성을 생략하지만 정의 된 가짜 관계만으로 하나의 객체를 다른 객체로 가져올 수 있습니다. 귀하의 경우에는

는 다음과 같은 것을 끝낼 것이다

$containers = ContainerQuery::create()->findByXXX('xxx'); 
$containers->getFirst()->getContents(); // Will return all joined content for the first container 

을 관련 사람과 물체의 인구 중 - 당신은 역의 관계 사용할 수있는 좋은 기회가 달성 : 그냥 물어

$contents = $container->getContents(); 
$container = $contents->getContainer(); 

을 코멘트, 그리고 당신이 필요로하는 무엇이든 내 대답을 확장합니다)