2011-09-06 5 views
0

부동산 (아파트, 주택, 산업 공간, 사무실)의 데이터베이스가 있고 각각 공통 속성 집합 (주소, 가격, 설명과 같은 모든 구성에 공통된 데이터베이스)이 있다고 가정 해보십시오. 텍스트, 좌표, 건물 내부의 사용 가능한 표면, 저항 프레임 재질 유형 (강철, 목재, 점토 : D 등). 해야할까요 :데이터베이스 설계 및 뷰에 관한 질문

1) 테이블, 아파트, 주택, 사무실 등을 만들고, 모든 구성이 포함 된 선택 쿼리를 수행 할 때 모든 테이블을 기반으로 모든 테이블 중에서 선택하는 뷰 (예 : all_constr)를 사용하십시오. (예 : 나무로 만들거나 콘크리트 스틸 또는 점토로 만든 저항 프레임)

나는보기가 두포에서 어떻게 작동하는지 잘 모르겠다. 하지만 내가 생각하는 것처럼 뭔가를 할 경우

 SELECT * FROM all_constr AS a --all_constr is the view 
    WHERE a.price <50000 AND a.surface >100 ; 

위의 쿼리를 실행할 때마다 특정 건물 테이블은 다음과 같습니다. 가상 테이블을 생성하기 위해 한 번 반복하고 필터링을 다시 수행합니다. 이것은 매우 효율적으로 보이지 않습니다. 반면 가상 테이블 AKA 뷰가 실제 테이블로 저장되는 경우 케이스 2)와 거의 동일합니다 + 빌딩 고유의 세부 정보를보고 싶을 때 고유 한 것이 없기 때문에 운이 좋지 않습니다. 이 같은

 CREATE VIEW all_constr AS 
    SELECT x.common_att1, x.common_att2, x.tableoid, x.id 
    FROM aps AS x 
    UNION ALL 
    SELECT x.common_att1, x.common_att2, x.tableoid, x.id 
    FROM houses AS x 
    UNION ALL 
    SELECT x.common_att1, x.common_att2, x.tableoid, x.id 
    FROM ind_spaces AS x 

2)은 constr 말 (다른 테이블을 작성) 및 링크 APS, 주택 : 등 주택, APS, 전역 식별자는 하나의 솔루션으로, 나는 생각의이 같은 뷰를 생성하는 것입니다

http://imageshack.us/photo/my-images/31/unledkwx.png/ 탁상용을 사용할 필요가 없다는 이점이 있습니다.

그래서 당신이보기를 사용하는 것이 좋은 습관이라는 것을 여러 번 듣고 읽는 방법으로 보는 것이 좋습니다.

LE : 나는이 너무 포스트 그레스 특정으로 상속을 사용하지 않도록하고 싶습니다 가능하면 PostgreSQL을에, 뷰가 rules을위한 속기이다

답변

1

(내가 한 것이 최적의 솔루션이기 때문에 그래도 아주 많이 마음을 해달라고).

쿼리 플래너가 규칙 /보기를 발견하면 규칙의 쿼리 조각을 현재 쿼리로 대체하고 계속 쿼리를 최적화합니다.

보기에서 직접 쿼리를 입력 한 것과 같습니다. postgresql은 뷰가 전혀없는 것처럼 쿼리를 최적화하고 가능한 가장 효율적인 작업을 수행합니다. 보기를 사용하면 성능이 저하되지 않습니다.

0

모든 공통 항목을 하나의 테이블에 결합하고이 테이블에 'type'(예약어 ...) 열을 추가하십시오. 선택적 속성을 Null 가능하게 만들거나 하나 이상의 개별 테이블에 넣습니다.

관련 문제