我应该如何在MySQL中为一对多关系构建数据

时间:2018-10-04 21:21:07

标签: mysql join

我正在设计一个系统,其中文件可以具有可变数量的自定义子字段。我需要能够检索和筛选带有所有附加字段的文件。字段可以由用户自定义名称和编号。这种情况下的最佳做法是什么?

我正在考虑将其设置为具有以下结构

TABLE files

id  file_name
1   My file
2   My other file

TABLE file_fields

id | file_id | field_id | value
1   1          1          microwave
2   1          2          a machine that heats stuff up
3   1          3          43.54
4   2          1          oven
5   2          3          34.22


fields TABLE

id  |  title
1      Name of product
2      Description of product
3      Price of product

然后我可以运行一个查询,该查询联接并合并file_fields记录,并将它们联接到文件记录...但是那笨拙吗?有没有办法有效地对这些字段进行json_encode而不是用管道分隔的concat值?查询将返回类似的内容。

id -> 1
file_name -> My file
fields -> 1|Name of product|microwave|2|Description of product|a machine that heats stuff up|3|Price of product|43.54

id -> 2
file_name -> My other file
fields -> 1|Name of product|oven|3|Price of product|34.22

仅将所有字段数据编码为JSON并存储在文本字段中是否会有严重的缺点?对于搜索,您可以进行仔​​细格式化的文本搜索...

我倾向于做这样的事情

TABLE files

id  file_name      field_values_json
1   My file        {"1":"microwave","2":"a machine that heats stuff up","3":"43.54"}
2   My other file   {"1":"oven","3":"34.22"}

TABLE fields

id  |  title
1      Name of product
2      Description of product
3      Price of product

对这种方法有何想法?

0 个答案:

没有答案