Как я должен структурировать данные в MySQL для отношения один ко многим - PullRequest
0 голосов
/ 05 октября 2018

Я проектирую систему, в которой файл может иметь переменное количество настраиваемых подполей.Мне нужно иметь возможность извлекать и фильтровать файлы со всеми прикрепленными полями.Поля настраиваются пользователем по имени и номеру.Какова лучшая практика для этой ситуации?

Я думаю о том, чтобы настроить ее на следующую структуру

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 эффективно использовать эти поля вместо конкатных значений, разделенных трубами?Запрос, который будет возвращать что-то вроде.

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

Есть какие-нибудь мысли по поводу этого подхода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...