MySQL:引用另一列的列

时间:2017-05-17 08:31:48

标签: mysql database

我想使用MySQL为我的程序添加字典功能。

它有3个表:productslanguagesproduct_dictionary

用户可以选择产品和语言,并在product_dictionary中找到相应的产品名称。

如果products表是:

products_id | product_name
1           | chocolate
2           | flour

languages表是:

languages_id | language_name
1            | english
2            | french
3            | german

我有两个product_dictionary表格的想法,但我不确定哪个是最好的。

products_id | languages_id | translation
1           | 1            | chocolate
1           | 2            | chocolat
1           | 3            | Schokolade
2           | 1            | flour
2           | 2            | farine

product_idlanguage_id创建复合主键以查找翻译的位置;

products_id | english   | french   | german
1           | chocolate | chocolat | Schokolade
2           | flour     | Farine   | Mehl

language_name表中languages列的值是product_dictionary表中的列名,而product_id也是product_dictionary的主键1}}表。

有人可以给我一些见解吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

我强烈推荐第一个选项,原因如下:

  1. 可能需要添加新语言,并且选项2需要您更改表格结构,而选项1则只需要插入新行

  2. 使用选项1您必须在代码中使用的查询可以在其where子句中包含两个参数,而使用选项2,您必须构建不同的select对于每种语言

答案 1 :(得分:1)

我建议你拥有以下数据库架构:

产品

id_product |
1          |  
2          |  
3          |  

语言(和你一样)

languages_id | language_name
1            | english
2            | french
3            | german

product_dictionary(第一个)

products_id | languages_id | translation
1           | 1            | chocolate
1           | 2            | chocolat
1           | 3            | Schokolade
2           | 1            | flour
2           | 2            | farine

您可以在product_dictionary中添加PRIMARY_KEY(products_id,languages_id)。

对于每种语言使用专栏通常不是一个好主意,因为如果你添加100多种语言,它就不容易维护。