Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Неизвестный набор атрибутов. Как лучше хранить?


Автор: BuShaRt 20.8.2012, 20:45
Нужно организовать хранилище для набора объектов имеющих общую природу, но разные наборы дополнительных атрибутов.

У меня есть хранилище ключей - я точно знаю ID ключа, его владельца и название - остальные параметры мне заранее не известны . Там может быть токен, два токена, пароль или даже фотография сетчатки глаза - все что угодно и любой структуры.

Я так понимаю похожим образом храниться информация в Facebook Graph API. Каждый объект может иметь уникальный набор параметров, не считая самых необходимых вроде ID.

Первое, что приходи в голову для организации такой структуры - это реляционная база данных в отдельной ячейки которой храниться XML документ с пользовательскими атрибутами, но мне кажется это очень по "деревернски". Подскажите пожалуйста, что может быть лучше и в каком вообще направление стоит копать по этому вопросу?

Автор: password 20.8.2012, 21:29
Я бы попробовал так:

Основная таблица (шапка)
  - ID объекта 
  - Какие то общие параметры для всех объектов

Таблица для строковых данных (DATA_S)
 -  ID объекта (для связи с основной таблицей)
 -  Par - параметр
 - Параметр типа varchar

Таблица для данных типа Date (DATA_D)
 -  ID объекта (для связи с основной таблицей)
 -  Par - параметр
 - Параметр типа Date

Таблица для числовых данных (DATA_N)
 -  ID объекта (для связи с основной таблицей)
 -  Par - параметр
 - Параметр типа Numeric

И создается справочник (можно программно), например:
 Объект записная книжка:
 Параметр (Par) | Название                   | тип 
     FIO                |  ФИО                          | varchar
    D_rozd           |  Дата рождения        | date
    tel1                |  № телефона             | numeric
   .....

И в зависимости от типа параметра в справочнике - записывать информацию в соответствующую таблицу:
 FIO -> DATA_S
 D_rozd -> DATA_D
 tel1 -> DATA_N
 
 

 

Автор: Fortop 20.8.2012, 22:02
Уже обсуждалось десятки раз

гуглить: разреженные матрицы, EAV  - это для реляционных БД
или же искать документооринетированные БД (CouchDB, MongoDB и т.д.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)