Хранение структурированных данных

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Хранение структурированных данных

Сообщение MIT » 23.10.2009 (Пт) 0:00

Необходимо создать внутри базы данных специфичную структуру, однако не могу додуматься как это сделать наиболее рационально.
Идей такая: в базе должны храниться описания структур и элементы, содержащие данные по этим структурам.
Сам пока додумался до создания 2х таблиц: первая содержит название структуры и ее идентификатор, а вторая - поля структур (всех): идентификатор структуры к которой поле принадлежит, название, описание (и еще чего-нибудь). Таким образом получаем возможность создания любого количества структур с любым количеством полей.
Проблема встает дальше - как хранить данные? Можно создать таблицу с сотней полей типа varchar(MAX), в надежде что больших структур у нас не будет, или же хранить данные в сериализованном виде в binary-полях, но оба эти варианта мне не нравиться из-за неуниверсальности и сложности поиска по данным.

Есть какие-то более гибкие и универсальные варианты? Или же надо подходить с другой стороны?
Оговорюсь, что вариант с созднанием отдельной таблицы для каждой структуры неприемлим, т.к. оных может быть довольно много и в процессе разработки неизвестно что там будет храниться.

MSSQL 2008
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Хранение структурированных данных

Сообщение Денис » 23.10.2009 (Пт) 7:55

Я голосую за сериализацию в бинарных полях.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Хранение структурированных данных

Сообщение alibek » 23.10.2009 (Пт) 8:14

xml используй.
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Хранение структурированных данных

Сообщение Денис » 23.10.2009 (Пт) 9:01

И еще один вариант:
Почему поля структуры должны непременно соответствовать полям таблицы?
Делаешь поле идентификатора записи, поле идентификатора структуры, поле имени структуры, поле имени поля структуры, поле типа поля структуры, поле значения поля структуры. И вперёд!
А потом запросом по идентификаторам и именам сможешь получить структуру со всеми полями.

UPD: Ой, я описал то же самое, что у тебя в топике, только запихнул всё в одну таблицу... В общем, тот вариант что у тебя сейчас самый лучший ИМХО, так как отвечает требованиям соглашений о дизайне структуры таблиц БД.
У тебя две таблицы, одна с названиями и индексами структур, вторая с полями, индексами и значениями. Устанавливаешь запрос по типу master-detail и получаешь значение любого интересующего поля. Врядли можно придумать что-то более оптимальное.

UPD2: ЕМНИП, этот вариант хранения данных называется не структуры а карточки. То есть, в объектной модели клиентского приложения это структуры, а в базе данных они превращаются в карточки. И обратно, соответственно.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Хранение структурированных данных

Сообщение MIT » 23.10.2009 (Пт) 12:59

alibek писал(а):xml используй
xml - это, конечно, хорошо, но надо будет еще как-то поиск осуществлять по данным, а чтение файла весьма ресурсоемко... Хотя вроде есть адаптеры данных для xml баз (речь идет, ясное дело, о .NET`е), позволяющие выполнять SQL запросы к файлам, но никогда таким не пользовался.

Денис писал(а):тот вариант что у тебя сейчас самый лучший ИМХО
Но в нем нет самого главного - в нем нет места непосредственно для хранения данных.


Пока шел домой придумал еще один вариант (основывается на моей первоначальной идее): сделать третюю таблицу, содержащую идентификатор строки (тут одна строка - одно значение), идентификатор струткуры, к которой оно относится, идентификатор поля вышеобозначенной структуры, идентификатор записи (т.е. "имя" объекта которому пренадлежит поле).

При таком раскладе можно получить:
1) Данные определенного объекта (экземпляра структуры): SELECT * FROM tblData WHERE идентификатор_записи = @id
2) Данные всех объектов из определенного поля объекта (например для поиска): SELECT * FROM tblData WHERE идентификатор_поля = @struct_field_id
3) Все обекты одного типа (созданные на основе одной структуры)
И т.п.

Такой вариант будет нормальным? Других идей пока нет, эта мне почти нравиться, единственное - будет огромное количество записей в таблице, но ведь база для этого и придумана...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Хранение структурированных данных

Сообщение Денис » 23.10.2009 (Пт) 13:39

MIT писал(а):Такой вариант будет нормальным?

Ну да. Одна таблица Имен (Заголовков), вторая таблица Полей, третья таблица Данных.

Между первой и второй таблицей связь через ID_Name -> ID_FieldName
Между второй и третьей таблицей связь через ID_FieldName -> ID_FieldData

Единственный минус, придется хранить данные в каком-то общем типе, Variant или String, а приводить к нужному типу на месте.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 193

    TopList