2012-06-12 2 views
0

제품 특성에 대한 단일 테이블 상속 (나중에 클래스 테이블 상속 가능) 모델을 사용하여 제품 데이터베이스를 구현하고 있습니다. 그게 다 잘되고 잘 작동하지만 참조 무결성을 유지하면서 제품 변형을 처리하는 최선의 방법을 파악하려고합니다.테이블 열 이름에 대한 제약 조건 (postgresql)

는 지금 내 주요 제품 테이블의 단순화 된 버전은 다음과 같습니다

CREATE TABLE product (

    id  SERIAL   NOT NULL, 
    name VARCHAR(100) NOT NULL, 
    brand VARCHAR(40) NOT NULL, 
    color VARCHAR(40)[] NOT NULL 

) 

경우 (색상은 특정 제품의 표준 색상을 모두 나열 할 수 있도록 배열입니다)

CREATE TABLE product_variant_theme (

    id    SERIAL  NOT NULL, 
    product_id  INT   NOT NULL, 
    attribute_name VARCHAR(40) NOT NULL 

) 

는 그중 내가 프로에 행을 삽입 : 나는 제품은 테이블이라고 product_variant_theme에서 변화하는 속성을 추적 간주 한 변종 처리 해당 속성의 열 이름을 attribute_name 필드에 추가하십시오. '색깔'.

처음에는 이것에 대해 설명하는 것이 완전히 어리석은 방법인지 알려주지 만 attribute_name과 실제 열 이름 자체 사이에 제약이 없다는 점이 걱정됩니다. 분명히 제품 테이블을 변경하고 그 컬럼을 제거한다면 나는 그것을 참조하는 두 번째 테이블에 여전히 행이 남을 수 있습니다. 내가 찾고있는 것과 기능적으로 동등한 것은 table을 설명하는 information_schema 뷰에 대한 attribute_name의 외래 키와 비슷할 것이지만 직접 할 방법이 없다고 생각합니다. 그런 종류의 기능을 여기에서 얻을 수있는 합리적인 방법.

감사합니다.

답변

1

이 같은 것을 찾고 계십니까?

product 
======= 
id 
name 


attribute 
========= 
id 
name 


product_attribute_map 
===================== 
product_id 
attribute_id 
value 
+0

그것은 EAV 방식 일 것이지만 나중에 다른 많은 쿼리를 복잡하게하기 때문에 내 요구에 적합하지 않습니다. 만약 내가 다른 테이블에있는 열의 실제 이름을 가진 문자열 값을 포함하는 'column_name'이라는 열이있는 테이블이 있다고 상상해보십시오. 두 번째 테이블에서 해당 열을 제거하면 계단식으로 삭제하고 싶습니다. 첫 번째 표에서 해당 열 이름을 가진 행 (해당되는 경우). –

관련 문제