我正在开发一款应用,我想知道什么样的数据库最适合我。
我试图对列表进行建模,但属性/结构因区域设置而异。我想在不同的特定于语言环境的结构中比较,搜索等这些列表/属性。始终可以选择为每个区域设置创建表格,但引用price = 100
而不是price_us = 100 OR price_de = 100 OR etc..
我已经阅读了很多关于MySQL中EAV的问题,看起来它可能不是我的理想解决方案(属性数量;过于复杂)。
那里有什么东西可以给我灵活性但也有类似FK约束的东西吗? (限于某些属性或值?)
答案 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模式,请首先考虑无模式数据库架构。