我正在设计一个系统,其中文件可以具有可变数量的自定义子字段。我需要能够检索和筛选带有所有附加字段的文件。字段可以由用户自定义名称和编号。这种情况下的最佳做法是什么?
我正在考虑将其设置为具有以下结构
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
对这种方法有何想法?