使用什么数据库系统? (EK与FK?)

时间:2012-03-20 18:50:13

标签: mysql database database-design nosql entity-attribute-value

我正在开发一款应用,我想知道什么样的数据库最适合我。

我试图对列表进行建模,但属性/结构因区域设置而异。我想在不同的特定于语言环境的结构中比较,搜索等这些列表/属性。始终可以选择为每个区域设置创建表格,但引用price = 100而不是price_us = 100 OR price_de = 100 OR etc..

之类的内容会很好

我已经阅读了很多关于MySQL中EAV的问题,看起来它可能不是我的理想解决方案(属性数量;过于复杂)。

那里有什么东西可以给我灵活性但也有类似FK约束的东西吗? (限于某些属性或值?)

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

EAV建模被认为是一种sql反模式,并且由于一些有效的原因,尽管它在某些部门即临床系统中是可行且相当常见的。然而,它违背了关系数据库所基于的一些原则(因此称为反模式),并增加了查询的复杂性/开销,同时使得难以维护数据的关系上下文。

也许几年前,除了在MySQL中实现这种模式之外别无选择,事实上我已经选择了这种方法。然而,12个月前我们切换到无模式后端(mongoDB),这非常适合存储具有可变属性的记录。

恕我直言 - 如果您正在考虑在MySQL中实施EAV模式,请首先考虑无模式数据库架构。