[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хранение значений разнотипных полей
jackDaniels
Сабж:
Есть 100 users.
Каждый user может создавать любое количество fields (в реальной жизни 5...20) и любое количество pages (1...10...100...1000).
Необходимо в базе хранить значения fields для pages.
При этом не обязательно для каждой page будут иметься значения для каждого field.
Связи между объектами разных users исключены.
Основная проблема в том, что fields есть как int, так и text, так и bool и других типов, обычно используемых.

Я вижу 4 варианта на данный момент:

1) Сделать несколько (values_int, values_text...) таблиц (по одной для каждого типа данных) с полями page_id, field_id, value.

2) Сделать одну таблицу с полями page_id, field_id, value_int, value_text, value_bool.

3) Сделать одну таблицу и все значения хранить в типе text. Поля будут просто page_id, field_id, value.

4) На каждого user создавать собственную таблицу, например: values_1, values_2... (по id user), с полем только page_id. А при добавлении/удалении fields - добавлять/удалять поля в таблице (менять структуру таблицы, т.е.), в соответствии с типом field.

Прошу помощи в прояснении плюсов и минусов каждого способа. База MySQL. Масштабы проекта приблизительные указал в начале поста. Заранее кланяюсь smile.gif



Спустя 12 минут, 28 секунд (27.08.2011 - 22:57) neadekvat написал(а):
Собственно, все упирается в то, для чего будут служить поля fields. Если по ним не будет производится поиск - то собрать все в одну таблицу
pages_fields
field_id, page_id, name, value.

Спустя 14 минут, 8 секунд (27.08.2011 - 23:11) jackDaniels написал(а):
Поиск и сортировка понадобятся периодически.

Из плюсов-минусов, что сам набросал:

предопределенная структура таблиц - 1,2,3
возможность изменения типа field (без переноса по 1000 записей) - 3,4
предопределенное и вменяемое количество таблиц - 1,2,3
простота запросов - 3,4
возможность выборки списка pages со значениями одним запросом - 4
легкое визуальное восприятие в pma - 4
корректная типизация - 1,2,4
адекватная сортировка - 1,2,4

Определиться никак не могу, разве что вариант 2 меньше всех нравится.
В 4 нравится все, кроме невменяемого количества таблиц.
В 1 не нравится, что каждую page надо собирать из нескольких таблиц.
В 3 не нравится, что нет корректной сортировки. С отсутствием типизации я бы смирился.

Все fields - дополнительные поля, никакой системной важности для приложения не несут.

Спустя 18 минут, 35 секунд (27.08.2011 - 23:30) neadekvat написал(а):
Тогда используй указанную мной.
Кроме того, посмотри в документации, там кажется были функции для того, чтобы рассматривать текстовое поле как числовое, это для корректной сортировки понадобиться (использовать функции надо при самой выборке с этой сортировке, физически это так и будет текстовым полем).
Можно еще добавить поле, чтобы указывать, что за тип у этого field
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.