0

我正在研究一個應用程序,我想知道什麼樣的數據庫最適合我。使用什麼數據庫系統? (EAV與FK?)

我想模擬列表,但屬性/結構因語言環境而異。我想比較,搜索等這些列表/屬性跨不同的語言環境特定的結構。總有一款適合每個區域創建表的選項,但price = 100代替price_us = 100 OR price_de = 100 OR etc..

我已經讀了很多這裏的問題就EAV在MySQL中它會是不錯的參考類似,似乎它可能對我來說不是一個理想的解決方案(屬性的數量;過於複雜)。

那裏有什麼能給我那種靈活性,但也有類似FK約束的東西嗎? (限制某些屬性或值?)

+0

EAV有什麼問題?它總是最好的方法,特別是當你的項目比預期的要大時。它是一個邏輯結構,易於理解和處理。 – Andreas 2012-03-20 18:59:20

+0

你有沒有考慮過分離成價格和貨幣? – 2012-03-20 19:00:57

+4

@Andreas這是一個粗略的過度概括。你能以任何方式備份或支持該聲明嗎? – 2012-03-20 19:17:14

回答

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將是複合的。

至於所有的數據選擇產品:

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

EAV模型被認爲是一個SQL反模式和有效的原因很多,雖然它是可行的,相當普遍的地方在某些領域,即臨牀系統。然而,它違背了關係數據庫基於的許多原則(因此稱爲反模式),並增加了查詢的複雜性/開銷,同時使維護數據的關係上下文變得困難。

也許在幾年前,除了在MySQL中實現這種模式,我確實沒有多少選擇,事實上我一直在研究選擇這種方法的系統。然而在12個月前,我們轉向了無模式後端(mongoDB),這非常適合用於存儲具有可變屬性的記錄。

恕我直言 - 如果您正在考慮在MySQL中實施EAV模式,首先考慮無模式數據庫架構。