我正在使用mysql 5.6.10。我想用导入表中的ID替换纯文本,以实现我的应用程序的多语言支持。 当前(示例)表如下所示:
| id | product_id | product_name | cover_material | inlay_material | price | language_code |
---------------------------------------------------------------------------------------------------------
| 1 | p1 | Name 1 | Aluminum | Aluminum | 100 | en |
| 2 | p2 | Name 2 | Iron | Aluminum | 200 | en |
| 3 | p3 | Name 3 | Plastic | Copper | 200 | en |
| 4 | p1 | Name 1 | Aluminium | Aluminium s2 | 100 | de |
| 5 | p2 | Name 2 | Eisen | Aluminium s2 | 200 | de |
| 6 | p3 | Name 3 | Plastik | Kupfer | 200 | de |
| 7 | p1 | Name 1 | Aluminio | Aluminio | 100 | es |
| 8 | p2 | Name 2 | Hierro | Aluminio | 200 | es |
| 9 | p3 | Name 3 | Plástico | Cobre | 200 | es |
该表包含针对每种可用语言存储的几种产品。
纯文本(在我们的示例中为两个实质列)应替换为id。 “封面材料”和“镶嵌材料”中的内容可以具有相同的内容,但在其他语言中没有相同的翻译。参见ID的1、4、7。
我的问题是,如何在此处正确进行
我首先创建了一个临时表,用于存储“封面材料”和“镶嵌材料”的内容。
CREATE TABLE tmp (
id int (10) unsigned NOT NULL AUTO_INCREMENT,
value TEXT NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO tmp (value) SELECT DISTINCT cover_material FROM products WHERE language_code = 'en';
INSERT INTO tmp (value) SELECT DISTINCT inlay_material FROM products WHERE language_code = 'en';
我正在使用此表获取唯一的ID(将来的lookup_id),而无需处理后面的管理过程。实际的翻译表由lookup_id,language_code和值组成。 lookup_id代表内容和我要接收该内容所用语言的language_code。
CREATE TABLE `translations` (
`id` int (10) unsigned NOT NULL AUTO_INCREMENT,
`lookup_id` int (10) unsigned NOT NULL,
`language_code` VARCHAR (2) NOT NULL,
`value` text NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO translations (lookup_id, language_code, value) SELECT id, 'en' AS language_id, value FROM tmp;
由于我现在拥有所有表和关联的lookup_id,因此我可以继续使用其他语言:
SELECT DISTINCT t.id AS lookup_id, 'de' AS language_id, de.inlay_material AS value
FROM products
RIGHT JOIN products DE ON en.product_id = en.product_id
INNER JOIN tmp t ON en.inlay_material = t.value
WHERE
en.inlay_material = t.value AND
en.language_code = 'en' AND
en.language_code = 'de';
因此,通过此过程,现在不再能够正确地找到“铝”的条目,因为有多个带有“铝”的条目。但是,我不想将它们简化为一个条目,因为其他语言的翻译可能有所不同。
您通常如何处理此类情况?这里必须有一个标准程序。但是,我在网上找不到任何东西。
我知道,表/数据库未完全标准化。到目前为止,我们已经获得了显着的性能优势,因此这些表尚未完全标准化。有什么想法可以解决这个问题吗?