gpt4 book ai didi

mysql - 多语言Web应用程序的数据库设计模式(MySQL)

转载 作者:行者123 更新时间:2023-11-29 13:08:50 24 4
gpt4 key购买 nike

我们正在开发一个应该支持多语言的 Web 应用程序,问题是涉及动态字段以及如何为其设计数据库

假设我们有这些表:

  product(id(Primary),name(text),description(text))

Category(id(Primary),name(text),description(text))

当涉及到在数据库中插入数据时,我们应该有 3 种不同语言的名称和描述,到目前为止,我决定按如下方式实现数据库:1. 创建一个表作为中间表,其结构如下:

 language_itme(id)

然后创建另一种表语言,其结构如下:

 language(id(Primary),field_name(text),en(text),fr(text),it(text),language_item_id(INT))

语言 item_id 指的是 language_item 表的 id然后将以下字段添加到表产品和类别中,

  product(id(Primary),name(text),description(text),language_item_id(INT))

Category(id(Primary),name(text),description(text),language_item_id(INT))

因此,为了插入产品,我们将在数据库中插入这些行:

   Auto_Generated_num -> language_item;

那么,

   ( Auto_Generated_num, productName,productDescription, last_id of language_item)
-> product

然后

  ( Auto_Generated_num, name, productName in English, productName in French,
productName in Italian, last_id of language_item) -> language

( Auto_Generated_num, description, productDescription in English,
productDescription in French, productDescription in Italian,
last_id of language_item) -> language

这里有没有人可以帮助我修改这个结构,使其从设计和性能的角度变得更好,甚至有多语言网站的经验,并为我提供更好的解决方案

提前致谢

最佳答案

尽管本网站上有类似问题的其他答案,我还是提出了以下多语言支持架构:

     +---------------+
| PRODUCTS_B |
+---------------+
| product_id |
| product_code |
| ... |
+---------------+
|
|
+-------------------------+
| PRODUCTS_T | +---------------+
+-------------------------+ | LANGUAGES |
| product_id | +---------------+
| translation_language_id |----| language_id |
| product_name | | language_code |
| product_desc | +---------------+
| ... | | |
+-------------------------+ | |
| | |
| | |
+-------------------------+ | |
| PRODUCTS_L | | |
+-------------------------+ | |
| product_id | | |
| language_id |----------+ |
| translation_language_id |--------------+
+-------------------------+

LANGUAGES 包含您希望在应用程序中支持的所有语言,它有一个主键 language_id:

1 ENG
2 FRA
3 ITA

PRODUCTS_B包含每个产品的不可翻译属性,它有一个主键product_id:

1 PROD/0A

对于每个可用的翻译,一条记录将被插入到 PRODUCTS_T 中,它有一个复合主键:product_id 和 Translation_language_id:

1(PROD/0A)  1(ENG)  Computer  A programmable device

对于每种支持的语言,一条记录将被插入到 PRODUCTS_L 中;表明这是要使用的翻译;它有一个复合主键:product_id 和 language_id:

1(PROD/0A)  1(ENG)  1(ENG)
1(PROD/0A) 2(FRA) 1(ENG)
1(PROD/0A) 3(ITA) 1(ENG)

PRODCUTS_L 应包含 PRODUCTS_B 和 LANGUAGES 的笛卡尔积中的每个值。

当翻译可用时, PRODUCTS_T 和 PRODUCTS_L 表中的记录将进行适当修改:

1(PROD/01)  1(ENG)  Computer    A programmable device
1(PROD/0A) 2(FRA) Ordinateur Un dispositif programmable

1(PROD/0A) 1(ENG) 1(ENG)
1(PROD/0A) 2(FRA) 2(FRA)
1(PROD/0A) 3(ITA) 1(ENG)

最终:

1(PROD/01)  1(ENG)  Computer    A programmable device
1(PROD/0A) 2(FRA) Ordinateur Un dispositif programmable
1(PROD/01) 3(ITA) Computer Un dispositivo programmabile

1(PROD/0A) 1(ENG) 1(ENG)
1(PROD/0A) 2(FRA) 2(FRA)
1(PROD/0A) 3(ITA) 3(ITA)

我使用此方法是因为在插入产品信息时我没有可用的所有翻译。它还指出,当有多个但并非所有翻译可用时,每种语言应使用哪种翻译。

关于mysql - 多语言Web应用程序的数据库设计模式(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22352214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com