我有一个数据库,用于新闻服务。新闻有可本地化的字符串,如标题,说明,文字。
现在我有一个表“新闻”和一个表“LocalizableVariables”。
参赛作品可能如下:
News Table:
ID (PK) | thumbnailURL | author | etc.
1 | www.*.*/picture.jpg | John Doe
LocalizableVariables Table (CK = Composite Key):
locale (CK) | newsID (CK) | name | value
en | 1 | title | "Example"
de | 1 | title | "Beispiel"
fr | 1 | title | "Exemple"
对于像MySQL这样的关系数据库,这是一个正确且高效的实现吗? 如果没有,我可以改变什么来获得最佳结果。
事先,我所工作的公司有这个想法:
News Table (CK = Composite Key):
ID (CK) | locale (CK) | title | etc.
1 | en | "Example"
2 | de | "Beispiel"
该版本是否会像其他版本一样快,即使没有规范化?
答案 0 :(得分:0)
都不是。
News Table - contains all language-independent columns:
ID (PK) | thumbnailURL | author | etc.
1 | www.*.*/picture.jpg | John Doe
NewsLocalization -- contains all language-dependent column;
has a composite PRIMARY KEY(newsID, locale), no AUTO_INCREMENT:
newsID (CK) | locale (CK) | title | etc.
1 | en | "Example"
1 | de | "Beispiel"
SELECT nt..., nl...
FROM NewsTable AS nt
JOIN NewsLocalization AS nl ON nl.newsID = nt.ID AND nl.locale = 'de'
WHERE nt...