Я хотел использовать реляционную базу данных (MySql) для хранения моих данных в виде пары ключ-значение.
- Я бы получил нет. пар ключ-значение динамически.
- Я могу создать простую таблицу, чтобы хранить их в отдельных столбцах.
- Значения могут быть типа int, varchar, text или date.
Проблема, с которой я сталкиваюсь:
Когда мне нужно выполнить запрос по ключу, значение которого должно быть целым числом, и мне нужно использовать и больше или меньше, чем запрос с ним. Тот же случай, когда мне нужно использовать между запросом с полями даты.
Как мне этого добиться?
----------------------------------------------- -Редактировать------------------------------------------------ ---
Для большей ясности я предоставляю справочную информацию по этому вопросу, который я разделил на три части:
1. Данные 2: вариант использования 3. Возможные варианты исполнения
1. Данные
Предположим, я создаю хранилище данных для переписи страны ** (только пример) **. Поля для хранения данных будут разными для мужчин, женщин, мальчиков или девочек, а также будут различаться в зависимости от профессии человека. Количество полей зависит от требования, которое может увеличиться до 500 и более.
2. Вариант использования
Покажите разбитый на страницы список лиц, чей ежемесячный доход составляет от 7000 до 10000 долларов. Пользователь может щелкнуть любой номер страницы, и база данных должна напрямую получить данные для этого номера страницы. Например, если мы показываем 10 результатов на странице и пользователь нажимает на 5-й странице, то мы должны показать ему список людей от 40 до 50.
Некоторые значения, относящиеся к определенному описанию группы хранилищ, которые могут иметь большие данные. Поэтому они должны храниться как ТЕКСТ.
3. Возможные варианты исполнения
Я могу создать отдельную таблицу для каждого отдельного типа и сохранить их данные в соответствующих полях. Но проблема, о которой я думаю в этом подходе, заключается в том, что максимальный размер строки в таблице MySQL составляет 65 535 байт. Если придерживаться этого подхода и хранить все данные по горизонтали, это может превысить ограничение максимального размера. Так как количество полей не фиксировано и может изменяться согласно требованию.
Вместо того, чтобы хранить данные по горизонтали, я могу хранить их по вертикали, используя дизайн Entity Attribute Value (пара ключ-значение). На данный момент увеличение количества строк за счет этого дизайна не является проблемой. Используя это, я могу хранить данные обо всех мужчинах, женщинах или детях в одной таблице. Но проблема с этим подходом:
Я потеряю тип данных некоторых важных полей. Я не могу запросить и получить список лиц, чей доход превышает 1000.
Для хранения данных или всех полей в одном типе значения мне нужно сделать его varchar. Но в некоторых полях хранятся большие данные, для которых требуется тип TEXT.
Учитывая вышеизложенную проблему, я подумал, что вместо создания только одного поля значения я создам несколько полей значений, таких как value_int, value_varchar, value_date или value_text.
Структура БД
Для этой проблемы я буду использовать MySQL и не смогу изменить БД из-за определенных ограничений. Поэтому я ищу дизайн только с MySQL.
Использование подхода ключ-значение - это хорошая идея или нет? Или любой другой возможный дизайн, который можно использовать?