문제

데이터베이스에 특정 품목을 가변적 인 속성으로 저장하고 싶습니다.

예를 들어:

항목은 'URL'및 'PDF'속성을 가질 수 있습니다.

따라서 문제는 일부 항목이 속성을 가질 수 있고 다른 항목은 많이 가질 수 있다는 것입니다.

이 데이터베이스를 어떻게 설계하겠습니까? 검색 가능하고 성능으로 만드는 방법은 무엇입니까?

스키마는 어떻게 생겼습니까?

감사!

도움이 되었습니까?

해결책

당신이 후에는 이름이 있습니다. 엔티티 속성 값 (EAV). 그것은이다 "사물 ("엔터티 "또는"개체 ")을 설명하는 데 사용할 수있는 속성 수 (속성, 매개 변수) 수가 매우 광범위하지만 실제로 적용되는 숫자가있는 상황에서 사용되는 데이터 모델 주어진 실체는 비교적 겸손합니다. "

다른 팁

반드시 SQL에 연결되어 있지 않다면 트리플 스토어 이 작업을 위해 정확하게 설계되었습니다. 대부분은 다음과 함께 쿼리하도록 설계되었습니다 sparql 쿼리 언어.

문서 데이터베이스에 완벽한 작업처럼 들립니다.

객체 (항목)로 시작하여 항목 테이블을 만듭니다. 항목이 1 개 이상의 속성을 가질 수 있습니까? 따라서 고유 한 ID로 속성 테이블을 설정하십시오. 이제 많은 항목 (일부는 복제 할 수 있음)과 많은 속성을 보유하는 테이블을 설정합니다 (복제 할 수 있음)

안건

itemid

항목 설명 ...

속성

AttributeId

귀속 ...

itemattributes

로드

itemid

AttributeId

이제 쿼리를 원할 때 원하는대로 테이블과 필터에 가입 할 수 있습니다 ...

EAV (Entity Attribute Value) 모델은 매우 유연합니다. 시맨틱 웹과 쿼리 언어 SPARQL은 EAV를 기반으로합니다. 그러나 어떤 사람들은이 모델에 성능 페널티가 있기 때문에 그것을 좋아하지 않습니다.

데이터베이스에서 고 부하 성능 테스트를 시작하십시오. 코딩을 마치면 너무 늦지 않기 때문에 그렇게하지 마십시오.

편집하다: 선정 진술의 속도에 집중하십시오. 사용자는 검색 할 때 빠른 결과를 기대합니다.

나는 과거에 다음과 같은 필드를 갖도록 이와 같은 테이블을 디자인했습니다.

  1. ID
  2. 유형
  3. 하위 유형

그런 다음 사용 된 유형과 하위 유형을 정의하는 다른 테이블을 갖게되고 아마도 그 유형과 하위 유형 조합에 대한 데이터 유형을 제공하여 프로그래밍 방식으로 시행 할 수 있습니다.

그것은 예쁘지 않으며, 당신이하지 않으면하고 싶지 않습니다. 그러나 당신이 할 때 내가 찾은 가장 좋은 방법입니다.

업데이트 : 하위 유형을 비워 두는 경우에도 이미 존재하는 것을 하위 분류하기를 원하기 때문에 너무 자주 발생하는 것이 좋습니다. 예제 유형 : 주소를 작성하고 이제 우편 주소 및 청구 주소 및 물리적 주소가 필요합니다.

이러한 종류의 시나리오의 경우 MS SQL 2005에서 XML 유형 열을 사용합니다 ... XML + SQL의 모든 장점이 있습니다. 그것은 SQL-Statement의 일부로 XPath 표현식을 사용하는 것입니다.

그것은 MS SQL 2005의 특징이며, 다른 RDBMS가 이것을 지원하는지 잘 모르겠습니다. 그 의미가 성능이 현명한 것이 무엇인지 잘 모르겠습니다.

다음 필드로 속성 테이블을 만듭니다.

item_id int (또는 ID 유형이 항목 테이블에있는 모든 것에 관계없이) property_name varchar (500) property_value varchar (500)

item_id와 항목의 ID 필드 사이에 외국 키를 설정하면 완료됩니다.

그것이 당신이 SQL에서 다중 관계를하는 방법입니다.

기본 키 "item_id"가있는 "항목"테이블, 기본 키 "Property_ID"가있는 "속성"테이블 및 "항목"테이블이있는 외래 키 "Item_id"가있는 것 같습니다. "속성"에는 Varchar 유형의 열 "이름"및 "value"열이 있습니다.

수행자? 모릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top