peter23
@peter23

Какова наилучшая схема базы данных для хранения табличных данных с настраиваемыми столбцами?

Здравствуйте.

Есть некий веб-сервис, который позволяет пользователям загружать табличные данные (например CSV). Столбцы этих данных определяются пользователями.

Пример такого файла:
| ID  | Name   | Color  | Size   |
|-----|--------|--------|--------|
| A11 | Apple  | Green  | Medium |
| B22 | Banana | Yellow | Big    |
| C33 | Carrot | Red    | Small  |


Может потребоваться фильтрация по отдельным столбцам, поэтому мой вариант схемы такой:

`fields_list`:
| field_id | data_file_id | field_name |
|----------|--------------|------------|
| 11       | 123          | ID         |
| 12       | 123          | Name       |
| 13       | 123          | Color      |
| 14       | 123          | Size       |

Primary key - `field_id`

`fields_data`:
| field_id | line_number | field_value |
|----------|-------------|-------------|
| 11       | 1           | A11         |
| 12       | 1           | Apple       |
| 13       | 1           | Green       |
| 14       | 1           | Medium      |
| 11       | 2           | B22         |
| 12       | 2           | Banana      |
| 13       | 2           | Yellow      |
| 14       | 2           | Big         |
| 11       | 3           | C33         |
| 12       | 3           | Carrot      |
| 13       | 3           | Red         |
| 14       | 3           | Small       |

Primary key - `field_id`+`line_number`

Вопрос #1: Хороша ли эта схема в данном случае? Какие проблемы она может вызвать? Есть ли лучшие варианты?

---

Мой коллега предлагает иной вариант:

`DataFile_123`:
| ID  | Name   | Color  | Size   |
|-----|--------|--------|--------|
| A11 | Apple  | Green  | Medium |
| B22 | Banana | Yellow | Big    |
| C33 | Carrot | Red    | Small  |


В этом случае мы должны создавать таблицу для каждого файла, а также создавать столбцы в этой таблице, когда пользователь задает их.

На мой взгляд такой подход создает кучу проблем (да, у нас могут быть тысячи файлов). И я вижу только одно небольшое преимущество - легче делать выборки.

Вопрос #2: Эта схема действительно настолько плоха, насколько мне кажется? Есть хоть какие-то причины использовать ее?
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Как на счёт посмотреть на возможности nosql решений? Документ-ориентированную базы вам отлично подойдут для хранения. А для описания структуры вам нужно только описать поля и их схему. Для хранения схемы уже есть несколько форматов ( но мне с телефона не удобно искать, уверен вы справитесь). Я бы ещё рекомендовал для таблицы генерировать модель для поиска и вывода и ее привязывать туда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы