2010-08-10 1 views
-2

나는 MATCH PARTIAL의 PostgreSQL 8.4의 부족함을 해결하려고합니다. 나는 다음과 같은 스키마가 : 이제Postgresql MATCH PARTIAL이 (가) 해결 되나요?

[vehicles] 
lot_id | vin | source | year | make | model ... 
    primary key (lot_id, vin, source) 

[pictures] 
picture_id | lot_id | vin | url | sha1 ... 
    primary key (picture_id) 

을, 내가 원하는 것은이 pictures 테이블에 vehicles 테이블 또는 무결성 제약 조건에 존재하는 lot_idvin을 요구하도록의 vehicles 테이블을 REFERENCES 그 화합물 FOREIGN KEY입니다 실패합니다. 문제는이 기능이 구현되지 않은 MATCH PARTIAL에서만 사용 가능하다는 것입니다. 이 효과를 쉽게 얻을 수있는 다른 방법이 있습니까? 현재 스키마 반복 전에 내 차량 테이블에는 각 소스에 대한 열이 있습니다. automated_makeoverride_makevin_decode_make 이것은 엉망이되고있었습니다. 그러나, 그것은없이 나타납니다 MATCH PARTIAL 나는 원래 의도했던 것보다 더 큰 변화를 만들어야 할 것입니다.

이것을 달성하려면 두 개의 화합물을 보관해야 할 것 같습니다. indexes

[index] 
lot_id, vin 
    primary key (lot_id vin) 

아마 그 과정에서 [sources][vehicles] 이름을 변경; 이 초과 테이블의 PRIMARY KEY에 대해 [vehicles][pictures]MATCH FULL으로 강제합니다.

답변

1

데이터 모델이 잘못되어이 문제가 발생했습니다.

vehiclevin (차량 식별 번호)으로 고유하게 식별되어야합니다. 차량의 정체는 그것이 속한 로트에 따라 바뀌지 않습니다. 그리고 그 사진은 그것이 속한 제비에 따라 변경 될 것 같지 않습니다 (예를 들어, "로트 4의이 Audi 사진"). .

사진은 자동차 및 많은 차량이 아닌 외부 (vin) 키이어야합니다.

자, 차량에 많은 될 수 있고, 어쩌면 당신의 모델, 그것은 을 많이해야합니다. 그래서 많은 테이블을 추가하고 차량에 FK를줍니다.

가난한 모델을 수용하려고 노력하는 데 시간을 낭비하는 대신 글 머리 기호를 수정하고 모델을 변경하십시오.

+0

차량은 vin으로 고유하게 식별되지만 테이블의 행은 '실제 세계의 차량'과 관련이 없으며 '웹 사이트의 차량'과 관련이 있으며 기업 사이트 및 기타 합법적 인 lot_ids에 걸쳐 중복 된 차량을 갖게 된 이유. 누군가 많은 차량을 가지고 다른 많은 차량에 파는 경우 - 사진이 계속 이어져야한다고 생각하십니까? 그 차량이 당신 경마장 표지판 앞에 앉아 있더라도?궁극적으로, 나는 그것이 다른 로트에 나타나면 내가 차량에 관해 안다라고 생각하는 무엇이라도 신뢰할 수있다. 그것은 그 모든 역사를 잃어 버려야한다. –

+3

예, 불량 모델입니다. 당신은 차량, 사진 및 그림이 있습니다. 따라서 차량 테이블, 기본 키 빈, 기본 키가 lot_id 인 로트 테이블, 차량 및 로트의 조합을 포함하는 다 대다 테이블의 테이블이 있습니다. 그런 다음 사진 테이블 참조 테이블을 만듭니다. – MkV

0

나는 차량이 단지 vin에 의해 정의되지 않는다는 것에 동의하지만, vin과 lot의 조합은 실제 차량이 아니기 때문에 동의한다. 개인적으로 기본 키에서 소스를 제거하고 소스 특정 데이터를 자체 테이블로 분리합니다. 그래서 우리는이 :


[vehicles] 
lot_id | vin 
    primary key (lot_id, vin) 

[vehicle_data] 
lot_id | vin | source | year | make | model ... 
    primary key (lot_id, vin, source) 
    foreign key (lot_id, vin) references vehicles 

[pictures] 
picture_id | lot_id | vin | url | sha1 ... 
    primary key (picture_id) 
    foreign key (lot_id, vin) references vehicles 

를 수동 여전히 같은 차량입니다 설명의 일부를 무시할 경우에도 마찬가지입니다.

0

이것은 잘못된 모델입니다. 일치 시키길 원하거나하지 않으려합니다. 전체 부분 아이디어는 특히 나쁜 모델을 다루기 위해 존재합니다. 다른 선택 사항이 없다면 방아쇠를 쓰십시오.