2012-06-30 2 views
1

내 웹 응용 프로그램의 사용자가 제품에 대한 자체 특성을 정의한 다음 해당 제품의 데이터를 입력 할 수 있도록하려는 것입니다. 이 기술을 n(th) normal form이라고합니다. 다음 데이터베이스 정규화 및 사용자 정의 데이터 저장소

내가 현재 배포 고려하고하고 긍정적 인면과 부정적인 무결성 및 확장 성 (및 기타 -ity의은 당신이 생각할 수)

Original Diagram

에 관해서 어떻게 될지 궁금 DB 구조입니다 편집

,554 (죄송합니다,이 더 무슨 뜻입니다)3210

나는 지난 15 분 동안 이것을보고 있었고 (빨간색 화살표가있는 곳에서) 중복을 유도하므로 무결성 검사를 받아야합니다. 그러나 나는 단지 내가 원하는 것을 어떻게 할 수 있는지 이해하지 못한다.

제품 수는 10 개를 넘지 않습니다. 변수 수는 200 개를 넘지 않습니다 (제품 당 최대 20 개). 제품 인스턴스의 수는 100,000을 초과하지 않으므로 pVariable_data의 최대 크기는 2 백만을 초과하지 않습니다.

+0

게시물을 올바르게 이해하는 경우이를 EAV (엔터티, 특성, 값) 유형의 데이터 모델이라고합니다. 당신의 질문은 정확히 무엇입니까? – wildplasser

+0

포인트가있을 수 있습니다. 나는 기분이 좋지 않습니다. 나는 잘 닳은 길을 걸어 가고 있습니다. – Sevenearths

+0

EAV 모델은 속성 집합이 가변적이고 설명되는 객체의 * 유형 *에 따라 다르면 적용 할 수 있습니다. (차에는 색깔이 있고 엔진에는 색깔이 없다) – wildplasser

답변

0

pVariable이 pVariable 유형이라고 가정하면 product_fk에 대한 참조를 삭제하십시오. 모든 제품 레코드에 대해 해당 테이블에 새 항목이 필요하다는 뜻입니다. 어쩌면이 같은 시도 :

Product(id, active, allow_new) 

pVariable_type(id, name) 

pVariable_data(id, product_fk, pvariable_fk, non_typed_value, bool, int, etc) 

나는 당신의 텍스트 값으로 non_typed_value을 사용을하고 (당신이 스트림을 유지하지 않는 한) 입력 된 값과 함께 해당 필드에 레코드를 작성합니다. 그것은 레코드의 가치를 두 번 유지하는 것을 의미 할 것이지만 업데이트에 대한 고통이 더 클 것입니다. 그러나보고와 함께 (더 쉽게 값을 표시 할 필요가있는) 쿼리가 더 쉬워 질 것입니다.

참고 : 모든 제품에 공통적 인 항목을 모두 가져 와서 제품 테이블에 넣는 것도 좋습니다. 예를 들어 모든 제품의 이름, 제안 가격 등이 가장 많습니다.

+0

그래서 빠른 조회 열로는'non-typed_value'가 필요하다. Hummm ... 흥미있는. 단일 유형 변수 질의의 속도에는 영향을 미치지 않지만 네 변수 질의 응답 속도는 빨라지겠습니까? – Sevenearths

+0

예를 들어 웹 페이지에 보고서를 여러 개 표시하거나 여러 제품을 표시해야하는 경우 (예를 들어보고 유형이 중요하지 않은 경우) 올바른지에 대해 걱정할 필요가있는 제품을 쿼리하는 것이 훨씬 쉽습니다 각 필드를 입력하십시오. –

+0

구현 (유형 변환 및 비교 연산으로 인해)이 DB 히트를 상당히 줄입니까? (즉, 필자는이 기능이 없기 때문에 실제로 필요하지는 않지만 사용자가 필요하기 때문에 구현할 수도 있습니다) – Sevenearths

2

이 모델은 데이터베이스의 데이터베이스라고하며 좋지 않습니다. 때로는 먼저 데이터베이스가 실제로 필요한지 여부를 확인하는 것은 불가능하지만 데이터베이스는 실제로 해당 작업에 적합한 데이터베이스입니다.

PostgreSQL에서는 다음과 같이 사용할 수 있습니다. http://www.postgresql.org/docs/8.4/static/hstore.html이 문제에 대한 표준화 된 솔루션입니다.

+0

감사합니다. 'hstore' 자료를 살펴 보겠습니다. – Sevenearths

+0

멋지다. 나는 포스트그레스가 가지고있는 것을 알지 못했다. 데이터베이스와 상호 작용하는 데 사용되는 툴킷에 따라 데이터베이스 구현을 스왑해야 할 경우 더 많은 문제가 발생할 수 있습니다 (이 응용 프로그램이 정적 형식의 언어 인 경우 매핑과 차이가 있음) –

+0

동의합니다. 나는 https://github.com/jordanm/django-hstore/를 구현해야 할 것이고, 조회시에 어떤 것이 될지 모르겠다. – Sevenearths