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模式,首先考虑无模式数据库架构。