0

나는 애플 리케이션에 종사하고 어떤 종류의 데이터베이스가 나를 위해 최선 일지 궁금했습니다.사용할 데이터베이스 시스템은 무엇입니까? (EAV with FK?)

모델을 등록하려고하고 있지만 속성/구조는 지역에 따라 다릅니다. 다른 로케일 특정 구조에 걸쳐 이러한 목록/특성을 비교하고 검색하고 싶습니다. 각 로케일에 대한 테이블을 생성하는 옵션은 항상 있습니다. 그러나 price_us = 100 OR price_de = 100 OR etc.. 대신 을 참조하는 것이 좋습니다.

여기 MySQL에서 EAV와 관련하여 많은 질문을 읽었습니다. 나를위한 이상적인 솔루션이 아닐 수도 있습니다 (속성의 수, 지나치게 복잡한).

유연성이 있지만 FK 제약 조건이있는 항목이 있습니까? (특정 속성 또는 값에 제한?)

+0

EAV의 문제점은 무엇입니까? 특히 프로젝트가 예상보다 커질 때 항상 최상의 접근 방식입니다. 논리 구조이며 이해하기 쉽고 처리하기 쉽습니다. – Andreas

+0

가격과 통화로 구분하는 것을 고려 했습니까? –

+4

@Andreas는 지나친 일반화입니다. 그 주장을 어떤 식 으로든 뒷받침하거나 뒷받침 할 수 있습니까? –

답변

2

음 .. 내가 좋아하는 뭔가 갈 것 :

Products   Locales    Prices 
----    -----------   ----------- 
product_id PK  locale_id PK   product_id FK 
name    title    locale_id FK 
descriptions       amount 
          if needed >> currency_id FK  

는 합리적인 구조처럼 보인다. Prices 테이블의 경우 PRIMARY KEY은 복합 요소입니다. 모든 데이터와 제품을 선택에 관해서는

: 그것은 가능한 공정하게 일반적인 장소가 특정 분야에 있지만 EAV 모델링가 SQL 안티 패턴 타당한 이유의 호스트로 간주됩니다

SELECT 
    Procucts.product_id 
    Products.name 
    Price.amount 
FROM Products 
    LFFT JOIN Prices USING(price_id) 
    LEFT JOIN Locales USING(locale_id) 
WHERE Locale.title = 'uk' 
0

임상 시스템 즉, . 그러나 관계형 데이터베이스가 기반으로하는 여러 가지 원칙에 위배되며 (따라서 안티 패턴이라는 용어) 쿼리에 복잡성/오버 헤드를 추가하는 동시에 데이터의 관계 컨텍스트를 유지하는 것을 어렵게 만듭니다.

아마 몇 년 전에 MySQL에서이 패턴을 구현할 수있는 선택의 여지가 거의 없었지만 실제로이 접근 방식을 선택한 시스템을 연구했습니다. 그러나 12 개월 전에 우리는 스키마가없는 백엔드 (mongoDB)로 바뀌 었습니다. 이것은 가변 속성을 가진 레코드를 저장하기에 자연스럽게 맞습니다.

이휴 - MySQL에서 EAV 패턴을 구현하려는 경우 먼저 스키마가없는 DB 아키텍처를 고려하십시오.