数据库架构可本地化的字符串

时间:2016-10-27 09:51:47

标签: mysql performance

我有一个数据库,用于新闻服务。新闻有可本地化的字符串,如标题,说明,文字。
现在我有一个表“新闻”和一个表“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"

该版本是否会像其他版本一样快,即使没有规范化?

1 个答案:

答案 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...