Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoВ соседних ветках это уже отмечалось, но выскажусь еще раз. Мне кажется, что попытка втиснуть в реляционные структуры динамически изменяющуюся модель (причем без использования CREATE TABLE и пр.) обречена на провал. Реляционные СУБД просто не приспособлены для такого обращения. Разумеется, можно построить некие абстракции высокого уровня и впихнуть в них все необходимые данные, но ценой станет отказ от множества функций, предоставляемых именно реляционной СУБД. Т.е. по сути прийдется строить объектную СУБД поверх реляционной, что ИМХО просто лишено смысла. Зачем так надрываться, если есть собственно объектные СУБД, причем ориентированные именно на использование с динамически изменяющимися структурами данных? Существуют решения, вплоть до используемых в коммерческих продуктах класса КИС. Примером может служить Альфа от Информконтакт (www.informcontact.ru), при всех проблемах этой системы там реальзованы "аналитические справочники", настраиваемые непосредственно пользователем (консультантом) под конкретный проект. При этом никаких претензий на объектность там нет (в версии 2.3). Аналитика может цепляться к различным сущностям (бизнес-обектам), заранее определенным разработчиком и имеющих в том числе и стандартные реквизиты (например "Счета", "Накладные" и т.п.) Проблем связанных с быстродействием из-за этой надстройки не было. Кончено данный механизм не предполагает изменений поведения объектов в зависимости от значений аналитик, но при желании и это можно реализовать используя тригера (СУБД Oracle). ЗЫ Прошу не рассматривать как рекламу продукта, сам продукт не могу посоветовать, только в качестве примера %) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 16:18 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoВ соседних ветках это уже отмечалось, но выскажусь еще раз. Мне кажется, что попытка втиснуть в реляционные структуры динамически изменяющуюся модель ... .................................... Зачем так надрываться, если есть собственно объектные СУБД, причем ориентированные именно на использование с динамически изменяющимися структурами данных? Не хотелось-бы повторяться, но рискну :) Ув. Alexey Rovdo! На вопрос "Зачем так надрываться..." есть (по крайней мере для части пишущих и читающих этот и подобные ему топики) ответы, и я их попытался сформулировать в /topic/134831&pg=14 в сообщении 28 янв 05, 17:47 - а именно: skorohod "...интересуют тех людей, которые в силу разных обстоятельств своей профессиональной деятельности пришли к выводу, что стандартная методика проектирования и разработки ИС на основе РСУБД их уже не удовлетворяет, а про ООСУБД они или: 1) не знают совсем; 2) знают (в разной степени хорошо) и хотят их использовать но НЕ МОГУТ - по финансовым, корпоративным или каким-либо другим причинам; 3) знают очень хорошо и поняли, что это тоже "не то" и сознательно не хотят их использовать; Так вот я считаю, что поднимаемые в обсуждении этого топика вопросы интересны в основном именно людям "3)" и наверно "2)". Т.е. тем, кто не хочет/может переходить на новый инструмент разработки, а хочет по максимуму использовать годами наработанный опыт работы с РСУБД на несколько более высоком (логическом) уровне." Среди читателей наверняка есть и люди 1) но они, после того как познакомятся с возможностями ООСУБД, или переходят на них (ООСУБД) или переходят в 2) / 3) категорию. Согласен, что ООСУБД есть, наверняка у них есть много удобств, преимуществ и т.д. по сравнению с РСУБД, есть много приверженцев, пользователей... НО! Вы не можете отказать никакому Васе Пупкину в его праве "убивать" время на реализацию вышеподнятого вопроса средствами именно РСУБД потому, что у него нет денег на Весант, потому, что у него нет времени и желания (ну такой уж он человек или работа, семья...) на изучение новой системы, наконец потому, что он просто любит работать с MS SQL или Interbase или еще чем-нибудь другим реляционным... Пусть таких Вась тут и не много, но они есть и этот топик именно им интересен! А Ваша позиция "Зачем надрываться..." - сродни (сорри) телерекламе! - "купите ххх, и в подарок Вы получите совершено бесплатно еще ууу и zzz!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 16:24 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoВ соседних ветках это уже отмечалось, но выскажусь еще раз. Мне кажется, что попытка втиснуть в реляционные структуры динамически изменяющуюся модель (причем без использования CREATE TABLE и пр.) обречена на провал. Реляционные СУБД просто не приспособлены для такого обращения. Разумеется, можно построить некие абстракции высокого уровня и впихнуть в них все необходимые данные, но ценой станет отказ от множества функций, предоставляемых именно реляционной СУБД. Т.е. по сути прийдется строить объектную СУБД поверх реляционной, что ИМХО просто лишено смысла. Зачем так надрываться, если есть собственно объектные СУБД, причем ориентированные именно на использование с динамически изменяющимися структурами данных? Вы невнимательны: авторсдается мне, что таковые построения существуют, и применительны к весьма неширокому кругу (кругам?) задач (назовем их "секретарскими"?), Повторю, я не хочу хранить "объекты" в смысле ООП. Я хочу понять, каковы мои возможности в построении реляционной БД для хранения разнообразных до/переопределяемых сущностей. (нигде у меня не сказано про "наследование" и еще черт знает что). Более того, дергать криэйттаблы только затем, что у меня подвижная структура сущностей (и больше ничего) - это ли не надрыв? А вот я возьму и выйду за любые рамки по количеству таблиц/полей. И что тогда? От чего и где отказываемся - это вопрос конкретной реализации "абстракции высокого уровня ", которые и хочется рассмотреть (и поковырять хотя бы виртуально пальцем), а, думается мне, не вопрос ИМХО-в. "Надрываться" - в смысле зачем описывать некую область в свзязных абстракциях, и, тем более, сравнивать разные описания? Их продуктивность? - Хотя бы затем, чтобы поиметь опыт такого описания. До тех пор, пока не рассмотрена ни одна, пусть умозрительная реализация, как мы узнаем, действительно ли этот подход не стоит рассмотрения ни при каких условиях? Давайте и останемся в наших узких рамках. А преимущества объектных БД в деле размещения динамически изменяемых структур данных можно рассмотреть и в другом месте - там где уже не один год меряются ИМХа-ми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 16:53 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321 skorohod Наверно эта ветвь форума не совсем соответствует Вашему вопросу. Вот если-бы ввести отдельную тему в ветви "Сравнение СУБД" (напр. "Сравнение реализаций ОР СУБД") - можно было-бы вести обсуждение Вашего вопроса там. Меня интересуют не сравнения СУБД, а "типовые" решения хранилищ "плохоструктурированных данных" (вернее данных, описание которых вводятся/модифицируются вместе с вводом/модификацией самих данных). Т.е. именно "_конструктивные_особенности_" схем данных, позволяющих таковое размещение без переконструирования структуры. Так я Вам фактически тоже самое и предложил, но другими терминами :) Смысл в том, что это д.б. именно сравнение. Тема д.б. "привязана" к первой странице ветви форума (если это здесь возможно). Пусть не в "Сравнение СУБД", пускай здесь - в общем нет большой разницы. Просто название надо более серьезное дать ("как корабль назовешь - так он и поплывет" :) 4321 - "Объектные" надстройки, выполняющие "криэйт таблы" на каждую вносимую сущность меня мало интересуют, ибо проблема не в том, что я хочу размещать модное слово "объект", а в том, что то, что я хочу размещать, будеть подвижно, и должно быть описано в таких терминах, которые будут достаточны для покрытия всего, что только сможет быть размещено, причем "покрытие" должно осуществляться как со стороны помещения так и со стороны интерпретации данных (т.е., в известном смысле - интерфейса - т.к., сдается мне, если набор абстракций, воплощенных в некую схему БД, позволяет интерпретировать сохраненную в ней информацию {на основе сохраненной в ней-же информации "об интерпретации"}, то стало быть и позволяет [понятную юзеру] визуализацию этой интерпретации - сиречь интермордс). Не все объектные надстройки выполняют "криэйт таблы" на каждую вносимую сущность, хотя такой функционал может выполняться автоматически и быть абсолютно скрыт от пользователя, редактирующего структуру данных системы. Это только один из возможных вариантов реализации. Полярный ему(но далеко не единственный альтернативный) вариант - жесткая неизменяемая "универсальная" структура БД в которой таблицы не изменяются и не добавляются при редактировании сущностей. А есть и множество промежуточных вариантов... "Типовыми" решения становятся, выходя в массы. Не думаю, что мы сможем здесь собрать именно "типовые" решения. Будет набор реализаций, имеющих единичные внедрения, хотя и это будет вполне достаточной почвой для сравнительного анализа. Я не собираюсь критиковать Ваше предложение - оно и мне интересно, и наверняка некоторым другим... (Только-бы здоровья хватило!) Давайте попробуем согласовать форматы представления здесь тематических "продуктов", критерии их сравнения! Я имею ввиду именно варианты архитектуры систем, организации реляционной структуры БД, организации хранения модели предметной области... Кроме того, думаю, это поспособствует реализации еще одного момента, ранее звучавшего в некоторых темах - возможно получится свести в единый формат и оформить в виде общедоступной библиотеки сами модели предметных областей задач учета (а может Вы это имели ввиду под "типовыми" решениями?), или хотя-бы общеупотребимых справочных частей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:13 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
skorohod Вы не можете отказать никакому Васе Пупкину в его праве "убивать" время на реализацию вышеподнятого вопроса средствами именно РСУБД потому, что у него нет денег на Весант, потому, что у него нет времени и желания (ну такой уж он человек или работа, семья...) на изучение новой системы, наконец потому, что он просто любит работать с MS SQL или Interbase или еще чем-нибудь другим реляционным... Пусть таких Вась тут и не много, но они есть и этот топик именно им интересен! А Ваша позиция "Зачем надрываться..." - сродни (сорри) телерекламе! - "купите ххх, и в подарок Вы получите совершено бесплатно еще ууу и zzz!" Вы уж очень эмоционально среагировали на вопрос (на который, по большому счету, и отвечать то было необязательно). Впрочем, это вполне понятный ответ на него. Только ведь и вопрос касался именно крайнего случая. А вот ниже уже выясняется, что и крейт-таблы все-таки допустимы и статические данные все-таки какие-то есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:22 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoТак ведь тут вовсе не промежуточный случай предлагается разобрать, а самый что ни есть крайний. Да и в промежуточном случае (т.е. если в задаче есть и статические, и динамические структуры данных) строить объектную базу поверх реляционной на мой взгляд нерационально. ну чё вы словами-тта кидаетесь? Хде сказано за объедки? За сущности базар идет. И токо за них. Не путайте красное с кислым. (встречается и сладкое и полусладкое). Alexey Rovdo Имеет смысл просто использовать две базы и соответствующий инструментарий (в т.ч. и входящий в состав самих СУБД) для их связывания. Обычно именно так и поступают. пгастите, а синхронизацией этого кентавра заниматься вася пупкин будет? Мдя-с. Вот уж гемору, так гемору. И куда они обычно такие-то поступают? В кащенку, али еще кудыть? Еще раз! Просьба не базарить за объедкные БД. Не наследуем мы код. Не наследуем и не перекрываем и задач таких не ставим. Мы узкую задачу посмотреть хочем. Меж прочим. скороходу: Повторюсь. Я хотел организовать "узкотематический" топик именно по организации хранения сущностей "с подвижной структурой" в виде неизменной реляционной структуры. Понятно, что наиболее известны в этой области реализации "дополнительных атрибутов" (внутри "обычных учетных схем" - т.е. таких, где для всего другого, кроме этих довесков - одна "сущность" в смысле предметной области - одна таблица). Но конь тут явно валялся и давно. Подначить людей, занимавшихся этим на пусть поверхностные обзоры своих "систем абстракций" у меня, кажется, не получилось - видимо дорожат своими ноу-хау. Их право. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:26 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321Подначить людей, занимавшихся этим на пусть поверхностные обзоры своих "систем абстракций" у меня, кажется, не получилось - видимо дорожат своими ноу-хау. Их право. Да ладно. Там решения на поверхности лежат - умный быстро сообразит, а неумным оно и вправду не нужно Я вот упирал на то что степень гибкости таковой "системы абстракций" зависит от того, насколько дорогую в разработке и внедрении систему рожать намерены. Причем для покрытия нужд среднего офиса тут не очень-то и копать нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:33 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey Rovdo А вот ниже уже выясняется, что и крейт-таблы все-таки допустимы и статические данные все-таки какие-то есть. Еще раз огромная просьба, свои домыслы и вымыслы обсуждать в в более приспособленном для этого месте. Тут сделана, признаюсь неудачная, попытка обсудить сугубо узкий вопрос - об отражении задачи о сохранении наперед не определенного набора сущностей с наперед не определенными атрибутами на жестко предопределенную структуру данных. Построить т.с. абстрактную модель именно этой, с позволенья сказать, "предметной области". И по возможности просмотреть, а в идеале - _систематизировать_ варианты (буде такие будут предложены). Но варианты именно такого отображения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:35 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321 Alexey Rovdo А вот ниже уже выясняется, что и крейт-таблы все-таки допустимы и статические данные все-таки какие-то есть. Еще раз огромная просьба, свои домыслы и вымыслы обсуждать в в более приспособленном для этого месте. Тут сделана, признаюсь неудачная, попытка обсудить сугубо узкий вопрос - об отражении задачи о сохранении наперед не определенного набора сущностей с наперед не определенными атрибутами на жестко предопределенную структуру данных. Построить т.с. абстрактную модель именно этой, с позволенья сказать, "предметной области". И по возможности просмотреть, а в идеале - _систематизировать_ варианты (буде такие будут предложены). Но варианты именно такого отображения. Ну ладно. Гм. Атрибут хранить в блобе. Тип атрибута хранить в целочисленном или символьном поле. Наименование в символьном поле. Можно еще поле для ссылки на другой атрибут завести, для хранения древовидных структур. Но какая с этого радость? Надо все что можно из таких блобов вытаскивать (самое тупое - завести для значений атрибутов числовое поле, текстовое, дата, блоб - ну и хватит), а то по значению атрибута искать плохо. Тип атрибута говорит, из какого поля вытаскивать значение. Накладных расходов на хранение - очень мало (все эти поля по сравнению с блобами места много не займут). Вот мое такое предложение Одна-две таблицы (блобы все же лучше хранить в еще одной таблице). Типа, осмысленность предложения проверена практикой. Теоретическая красивость меня в данном случае больше не интересует :] Это все было про атрибуты объектов. Сами объекты (документы) я храню в еще одной таблице. Есть опять-таки поле для формирования дерева объектов (просто ссылка на родителя). Связи между документами я не храню и они меня не интересуют (за исключением упомянутого отношения parent-child) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 17:53 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
DogenP.S. По большому счету это все фигня, РСУБД внутри РСУБД. Имхо, может быть нужно только для построения перечней объектов с наперед неизвестным набором атрибутов. Ну да. ну да. Именно в первую голову для построения перечня. Но ничто же не мешает в атрибуты включить и принадлежность к внесенному нами же в классификатор (атрибутов) типу (не базовому, а в смысле классификатора). Нет? (Ну что-то в этом роде, если не вдаваться в организацию всех этих абстракций, пока еще туманную). И вот мы можем делать выборку (из перечня) не только по наличию у объекта атрибута со значением "Вася Пупкин", но по наличию атрибута "такой весь из себя специальный атрибут" (это тип его, атрибута, значица - т.е. тоже значеньице текстовое некое, вот только где... ) со значением "Вася Пупкин". Нет? И "Вася Пупкин" (значение такое) в других атрибутах нервно курит в сторонке, и не портит нам отчетность. Так? Вот и вопрос, как замесить это все покрасивше. Т.е. растолкать по некоторым абстракциям, отражающим всю эту кухню в нескольких базовых понятиях и связях между ними. Разные ж наверное реализации-то есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:01 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321 DogenP.S. По большому счету это все фигня, РСУБД внутри РСУБД. Имхо, может быть нужно только для построения перечней объектов с наперед неизвестным набором атрибутов. Ну да. ну да. Именно в первую голову для построения перечня. Но ничто же не мешает в атрибуты включить и принадлежность к внесенному нами же в классификатор (атрибутов) типу (не базовому, а в смысле классификатора). Нет? (Ну что-то в этом роде, если не вдаваться в организацию всех этих абстракций, пока еще туманную). И вот мы можем делать выборку (из перечня) не только по наличию у объекта атрибута со значением "Вася Пупкин", но по наличию атрибута "такой весь из себя специальный атрибут" (это тип его, атрибута, значица - т.е. тоже значеньице текстовое некое, вот только где... ) со значением "Вася Пупкин". Нет? И "Вася Пупкин" (значение такое) в других атрибутах нервно курит в сторонке, и не портит нам отчетность. Так? Вот и вопрос, как замесить это все покрасивше. Т.е. растолкать по некоторым абстракциям, отражающим всю эту кухню в нескольких базовых понятиях и связях между ними. Разные ж наверное реализации-то есть? "по наличию атрибута" у меня реализовано путем введения сущности "тип документа", а ей уже соответствует определенный набор атрибутов. Набирать заранее неизвестный набор атрибутов для каждого документа мне нет нужды (ну если приперло создать уникальный документ - создайте для него новый тип, сиречь набор атрибутов). Это дисциплинирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:07 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Ну там (в области анализа объектов, атрибутов, связей их) и правда где-то 7...10 сущностей, а вариантов как их связать - до фига. Что Вы их, все перечислить хотите??? Тут уж из задач надо исходить - для чего Вам такая схема нужна. "пока вы смотрите свой телевизор, инопланетяне через него трахают вам мозги" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:10 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Dogen "по наличию атрибута" у меня реализовано путем введения сущности "тип документа", а ей уже соответствует определенный набор атрибутов. Набирать заранее неизвестный набор атрибутов для каждого документа мне нет нужды (ну если приперло создать уникальный документ - создайте для него новый тип, сиречь набор атрибутов). Это дисциплинирует. Продолжаем колоться Вот уже прорезалась табличка "тип документа" (или даже "тип сущности"?) + табличка "атрибуты сущности" - т.е. это описатели структуры (уже "юзерской") сущности. По ним, я так понимаю, вы интермордс вырисовываете для заполнения экземляра "документа" заданного вида. Так глядишь и раскрутим на более подробное раскрытие. Сразу вопрос. "Тип документа" (сущности) у вас имеет какие либо иерархические причандалы? (Скажем просто - в качестве организации просмотра типов по дереву типов, а не для какого-нть наследия). И (только тихо! не к ночи помянуто): забирались вы в реализацию "наследования" структур одним "типом документа" (в вашей терминоЛогии) от другого или нет? (не в смысле выкопирования описателя, от одного id к другому, а в смысле именно "наследования". Тилько шопотом (боюсь опять выскочат объектщики, тьфу на них). И нужно ли оно в таких вещах? - Понятно, что запросы, если описатель собирается просмотром по "дереву", усложнятся (вернее могут - "ит депендс"), а обычная для БД реализация "наследия" в смыле выкопирования атрибутов от одного "типа сущности" к другому пусть и не съекономит места в описателях (и не даст жесткости, т.е. даст свободу не иметь "потомку" ненужного добра), но не заставит заморачиваться просмотром всех "предков"). Или "наследование" структур тоже вполне реализуемо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 18:41 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Ну нате вам вариант из практики. Привожу только один модуль. Под каждую сущность создается свой отдельный модуль (так что динамическое изменение набора сущностей здесь не пройдет). Статические атрибуты сущности Документы лежат в таблице d_Document. Динамические атрибуты перечислены в DocumentExtendedData, а их реальные значения лежат в других модулях (это могут быть и обыкновенные значения - целые, даты и т.п. - и другие сущности, имющиеся в базе). Таблицы ...Group... реализуют вспомогательный интерфейс для группировки сущностей и в рассматриваемом контексте о них можно забыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 19:18 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoНу нате вам вариант из практики. Ихде тут обьектная БД - атдельна, релясьонная -атдельна? Или это к другому чому пример? Alexey Rovdo Привожу только один модуль. Под каждую сущность создается свой отдельный модуль (так что динамическое изменение набора сущностей здесь не пройдет). Статические атрибуты сущности Документы лежат в таблице d_Document. Динамические атрибуты перечислены в DocumentExtendedData, а их реальные значения лежат в других модулях (это могут быть и обыкновенные значения - целые, даты и т.п. - и другие сущности, имющиеся в базе). Таблицы ...Group... реализуют вспомогательный интерфейс для группировки сущностей и в рассматриваемом контексте о них можно забыть. Саавем другое дело... ик. Вот выбрось статику из d_DOcument, ик, и подумай как в ней разместить все типы (динамически доопределяемые), ик, и вернемся к постановке задачи в ее начальном звучании, ик... А, кстати я не паааанимаю, зачем у тебя в таблицах пппа 2 ключа - глобальАйДи + еще что-тта. Или глобаль он того, он не совсем глобаль? И чего то я не всего то понимаю... ик. Наверное это у тебя АйДи таблицы так храницца? и чё, прям так в каждой записи одно и то же число и лежитттт. Ой саавсем я забблудился. Звиняй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2005, 21:25 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
К объектным СУБД это не имеет никакого отношения. Действительно в некоторых таблицах по два идентификатора. Мне так было удобнее исходя из потребностей конкретной задачи. В принципе везде можно оставить исключительно GlobalID , переопределив соотвествующим образом и все Foreign key. И действительно в каждой таблице GlobalID дублирует соответствующее значение из таблицы d_Global (1-to-1 relation). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2005, 12:56 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Alexey RovdoК объектным СУБД это не имеет никакого отношения. Я так и понял. Не удержался от подначки на тему "так обычно и делают" (проскакивало выше по топику). - Заметим, в целом мысль крутится вокруг одной и той же схемки: описатели типов сущностей (для интерфейса т.е. для "интерпретации") - в данном случае, как я вижу -a_DocumentType|a_DocumentExtendedDataType + экземпляры сущностей - тут таблички d_xxx, собственно значения атрибутов-скаляров (у динамически доопределяемых атрибутов), как я вижу, вне схемки (видимо в общей для всех классов табличке значений?). Т.е. все трабла в том, что описатели типов разных сущностей не очень хотят сводится в одну реляционную структурку? Есть ли другие подходы к запихиванию динамически приписываемых атрибутов к сущностям? Alexey Rovdo Действительно в некоторых таблицах по два идентификатора. Мне так было удобнее ... Хозяин - барин. Я тоже щас репу морщу по поводу идейки отдублировать ключ в табличку (правда Fk, но тоже явное излишество). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2005, 19:40 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321 Dogen "по наличию атрибута" у меня реализовано путем введения сущности "тип документа", а ей уже соответствует определенный набор атрибутов. Набирать заранее неизвестный набор атрибутов для каждого документа мне нет нужды (ну если приперло создать уникальный документ - создайте для него новый тип, сиречь набор атрибутов). Это дисциплинирует. Продолжаем колоться Вот уже прорезалась табличка "тип документа" (или даже "тип сущности"?) + табличка "атрибуты сущности" - т.е. это описатели структуры (уже "юзерской") сущности. По ним, я так понимаю, вы интермордс вырисовываете для заполнения экземляра "документа" заданного вида. Так глядишь и раскрутим на более подробное раскрытие. Сразу вопрос. "Тип документа" (сущности) у вас имеет какие либо иерархические причандалы? (Скажем просто - в качестве организации просмотра типов по дереву типов, а не для какого-нть наследия). И (только тихо! не к ночи помянуто): забирались вы в реализацию "наследования" структур одним "типом документа" (в вашей терминоЛогии) от другого или нет? (не в смысле выкопирования описателя, от одного id к другому, а в смысле именно "наследования". Тилько шопотом (боюсь опять выскочат объектщики, тьфу на них). И нужно ли оно в таких вещах? - Понятно, что запросы, если описатель собирается просмотром по "дереву", усложнятся (вернее могут - "ит депендс"), а обычная для БД реализация "наследия" в смыле выкопирования атрибутов от одного "типа сущности" к другому пусть и не съекономит места в описателях (и не даст жесткости, т.е. даст свободу не иметь "потомку" ненужного добра), но не заставит заморачиваться просмотром всех "предков"). Или "наследование" структур тоже вполне реализуемо? Типы документов я наследовать один от другого не собираюсь, поскольку в нашем случае это будет полезно, но трудозатраты вряд ли окупятся. В будущем - может быть. Но честно говоря, намного проще написать процедуру копирования набора атрибутов одной сущности в новый такой набор. Подробнее уже некуда. Следите за рекламой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 09:33 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Dogen Типы документов я наследовать один от другого не собираюсь, поскольку в нашем случае это будет полезно, но трудозатраты вряд ли окупятся. В будущем - может быть. Разумный скепсис, но, с другой стороны, отсутствие опыта [попыток реализации] - это отсутствие опыта. Т.е. оценка трудозатрат не подкреплена реальными шишками от реальных грабель. - Я как раз на развилке в принятии решения. С одной стороны - казалось бы упрощается обновление наследуемых атрибутов при их редактировании в предке. Но только тех, которые не поимели конкретных значений в потомках (тут возникает проблема разруливания по логике - какие-то атрибуты должны иметь возможность перекрывать в потомке тип, заданный в предке, какие-то нет. Какие-то действия пользователя по настройке классификации типов _должны_ а) однозначно пытаться сменить тип атрибута и во всех потомках сущности ("CASCADE"), б) - какие-то только в тех, которые еще "не перекрыты явно" (не поимели своих строк в описателе) или не поимели _значений_ унаследованного типа (в этом случае - нужно будет "перекрывать" ("теневым образом" - разве что сообщив об этом) атрибуты потомков в процессе редактирования атрибута предка, в) какие-то должны иметь влияние только на текущий уровень классификации (т.е. все потомки не должны наследовать этого атрибута). Все то же самое, как легко заметить, можно и сделать с помощью выкопирования описателя объекта в его детей (и поиметь те же вопросы "теоретического" характера при переопределении атрибутного состава предка). DogenНо честно говоря, намного проще написать процедуру копирования набора атрибутов одной сущности в новый такой набор. чего проще - всобачить триггер на заимствование аттрибутов при создании потомка (+- для полной логической завязки - триггер на редактирование предка, но тут - сразу вопросы к логике - т.е надо оперделиться "что мы хотим поиметь"). Кстати, в некоем смысле то, что привел Alexey Rovdo описывает (частично) то, о чем говорите и Вы? Т.е. приблизительно та же завязка между типами и экземплярами? Правда самих значений ("расширенных") атрибутов я у него на схеме не вижу. Кажется - только ссылки? 2Alexey Rovdo: Смотрю я на вашу схемку, и возникают у меня вопросы: 1. За что отвечают поля IsChilde и IsReplicated? Какой в них физ смысл (что за абстракции или логические связки промеж оных в них порылись?) 2. За что отвечает поле d_DocumentExtendedData.DataObjectID (d_DocumentExtendedData.Type - это кааца Fk к ID из aDoc....DataType) ? (если это дубликат d_Document.Type - то это то, о чем я думаю? Т.е. денормализация с целью поиметь нужные индексы в d_DocumentExtendedData ?) Или это ссылка на реализацию атрибута в какой-нть табличке значений? (если вы его находите не через GlobalID) 2.1 (того же типа вопрос и по ObjectTypeID) 3. Ну и т.п. __ 2All: не видно особых альтернатив к набору абстракций, покрывающих "предметную область" (и даже к реализации). Пока только такой набор (грубо): 1. Сущности 2. Их сотав (описатели) 3. Экземпляры сущностей +- 4. (вероятно по вкусу) - дублирование всего набора на сущности "блатного" типа "атрибут". Нешто никто не делал иначе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 11:43 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321 Dogen Типы документов я наследовать один от другого не собираюсь, поскольку в нашем случае это будет полезно, но трудозатраты вряд ли окупятся. В будущем - может быть. Разумный скепсис, но, с другой стороны, отсутствие опыта [попыток реализации] - это отсутствие опыта. Т.е. оценка трудозатрат не подкреплена реальными шишками от реальных грабель. - Я как раз на развилке в принятии решения. С одной стороны - казалось бы упрощается обновление наследуемых атрибутов при их редактировании в предке. Но только тех, которые не поимели конкретных значений в потомках DogenНо честно говоря, намного проще написать процедуру копирования набора атрибутов одной сущности в новый такой набор. чего проще - всобачить триггер на заимствование аттрибутов при создании потомка (+- для полной логической завязки - триггер на редактирование предка, но тут - сразу вопросы к логике - т.е надо оперделиться "что мы хотим поиметь"). 2All: не видно особых альтернатив к набору абстракций, покрывающих "предметную область" (и даже к реализации). Пока только такой набор (грубо): 1. Сущности 2. Их сотав (описатели) 3. Экземпляры сущностей Нешто никто не делал иначе? А кому оно надо иначе? Ведь этим люди пользоваться будут, а нашим среднестатистическим людЯм такие навернутые концепции как иерархии типов документов не то что не нужны, а объяснить может быть сложно :)) С другой стороны, ну сделаю я такую иерархию, когда кому-то она реально понадобится. На все остальные функции это никак не повлияет, повлияет только на процесс создания/реадктирования типов документов. Что делается, если Вы реально эксплуатировали подобные системы, далеко не каждый день. Касательно разумного скепсиса - это в настоящее время деньгами определяется. Можно много чего наизобретать, но зачем изобретать то что никому еще не было нужно. Проще заранее подумать о возможном расширении структур данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 12:47 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
IsChild Определяет тип атрибута (не забываем, что атрибутом может быть любая сущность), с точки зрения его самостоятельности. Есть атрибуты зависимые и независимые. Зависимые атрибуты (сущности) имеют "хозяина" (d_Global.Owner_id). Зависимые атрибуты (сущности) удаляются вместе со своим "хозяином". Поле IsChild анализируется только в момент вставки нового атрибута. После того, как атрибут (сущность) уже оказался в базе, определение его зависимости/независимости уже происходит по значению d_Global.Owner_id. Замечание: все, что лежит в таблицах с именами a_... фактически имеет отношение к бизнес-логике, а не к самим данным. IsReplicated Задает уникальность атрибута для каждого документа. Т.е. должен ли документ иметь только один такой атрибут или их может быть множество (одинаковые имена и типы атрибутов, но возможно разные значения). IsHeritable В данной схеме нет, но в отдельных случаях тоже использовал. Если объекты могут объединяться в иерархию (например, в таблице d_Document есть поле parent_id, указывающее на документ-родитель), то атрибуты родительского объекта могут считаться и атрибутами всех принадлежащих им сущностей-потомков, а могут и не являться. Поле IsInherited как раз и определяет этот факт. Разумеется есть две стратегии поведения, которые выше уже и были упомянуты. 1-я - это строить схемы и писать процедуры для того, чтобы вытягивать сами значения наследуемых атрибутов из сущностей-родителей. 2-я - при создании сущностей-детей копировать все наследуемые значения в соответствующие атрибуты именно этих сущностей. Второй способ на мой взгляд лучше с точки зрения быстродействия выборки и обработки запросов на чтение. Первый способ сокращает издержки при записи и изменении значений атрибутов. Поле d_DocumentExtendedData.DataObjectID указывает на сущность, которая является значением атрибута. А ObjectTypeID ограничивает возможный выбор таких сущностей только одним типом (бизнес-логика). Чтобы было чуть понятнее приведу еще один модуль этой базы (простейшие сущности - параметры). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 13:15 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Посмотрю еще. А пока: Alexey Rovdo IsChild Определяет тип атрибута (не забываем, что атрибутом может быть любая сущность), с точки зрения его самостоятельности. Есть атрибуты зависимые и независимые. Зависимые атрибуты (сущности) имеют "хозяина" (d_Global.Owner_id). Зависимые атрибуты (сущности) удаляются вместе со своим "хозяином". Поле IsChild анализируется только в момент вставки нового атрибута. После того, как атрибут (сущность) уже оказался в базе, определение его зависимости/независимости уже происходит по значению d_Global.Owner_id. Немного не допонял. т.е. вы обрабатываете следующую ситуацию (для простоты считаем что речь идет исключительно о "документах"): "Документ" + "Приложение к нему". (Когда приложение - тоже документ, но не живущий без "хозяина", и удаляемый вместе с ним. Причем оно может входить не более чем в один документ (иначе как рулить удалением? считать ссылки?). Если же ссылочный(сущностный) атрибут (некоего "хозяина") может входить во что угодно (справочный - например контрагенты с их структурой) то он неЧайлд? Или же речь о более широком классе случаев? (например мы хотим иметь разные "представления" сущности. Если мы поленились выделить их в нечто выделенное (отличное по хранению от сущностей), то надо помнить, как долго живет данное "представление"? (оно при этом не "приложение" а "другое лицо" той же сущности, и не может входить в более чем одно отношение-связь "хозяин"-"представление" - в точности как и в случае с приложением)? Alexey Rovdo Замечание: все, что лежит в таблицах с именами a_... фактически имеет отношение к бизнес-логике, а не к самим данным. В моем случае это "логика интерпретирования вообще". Т.е. имеет прямое отношение к хранению типов и ("хранению") их интерпретации. Alexey Rovdo IsReplicated Задает уникальность атрибута для каждого документа. Т.е. должен ли документ иметь только один такой атрибут или их может быть множество (одинаковые имена и типы атрибутов, но возможно разные значения). С этим ясно. Что-то в этом смысле мыслилось. Правда в некоторых случаях есть "предельная емкость". Alexey Rovdo IsHeritable В данной схеме нет, но в отдельных случаях тоже использовал. Если объекты могут объединяться в иерархию (например, в таблице d_Document есть поле parent_id, указывающее на документ-родитель), то атрибуты родительского объекта могут считаться и атрибутами всех принадлежащих им сущностей-потомков, а могут и не являться. Поле IsInherited как раз и определяет этот факт. Разумеется есть две стратегии поведения, которые выше уже и были упомянуты. 1-я - это строить схемы и писать процедуры для того, чтобы вытягивать сами значения наследуемых атрибутов из сущностей-родителей. 2-я - при создании сущностей-детей копировать все наследуемые значения в соответствующие атрибуты именно этих сущностей. Второй способ на мой взгляд лучше с точки зрения быстродействия выборки и обработки запросов на чтение. Первый способ сокращает издержки при записи и изменении значений атрибутов. Вопрос возникает при перемещении по иерархии. Какие вообще перемещения считать допустимыми? Зависит ли признаки допустимости перемещений от типов сущностей. Есть ли у кого опыт анализа ситуаций в этой области? Или все предпочитают не заморачиваться данным вопросом, запретив перемещение типов в классификаторе (при наличии "наследования" атрибутов, в любом из предложенных видов) Alexey Rovdo Поле d_DocumentExtendedData.DataObjectID указывает на сущность, которая является значением атрибута. А ObjectTypeID ограничивает возможный выбор таких сущностей только одним типом (бизнес-логика). Чтобы было чуть понятнее приведу еще один модуль этой базы (простейшие сущности - параметры). Ну где-то так я и думал (т.е. даже для атрибута "простого" типа вы отсылаете его в требуемую глобальную таблицу(ы) значений, кстати, в силу зависимости таблиц от типов, запрашивание величин атрибутов (или их интерфейсов - для сущностных) происходит динамически - ищем таблицу (поле) по типу объекта + ищем интерфейс по тем же признакам? Имена втавляем в строки запросов и т.п...?). Хотя было сомнение. 2Dogen Странно таки что нет других абстрактных схем. Головы то разные. Или у всех испорчены реляционным взглядом на вещи? (проскакивали тут намеки на нечто иное в принципе - какая то даже предикативная арифметика, казалось бы. Ихде они авторы?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 14:20 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321 2Dogen Странно таки что нет других абстрактных схем. Головы то разные. Или у всех испорчены реляционным взглядом на вещи? (проскакивали тут намеки на нечто иное в принципе - какая то даже предикативная арифметика, казалось бы. Ихде они авторы?) Бритва Оккама, знаете ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 14:25 |
|
||
|
Систематизируем велосипеды?
|
|||
|---|---|---|---|
|
#18+
4321Спасибо за ответы. Посмотрю еще. А пока: Alexey Rovdo IsChild Определяет тип атрибута (не забываем, что атрибутом может быть любая сущность), с точки зрения его самостоятельности. Есть атрибуты зависимые и независимые. Зависимые атрибуты (сущности) имеют "хозяина" (d_Global.Owner_id). Зависимые атрибуты (сущности) удаляются вместе со своим "хозяином". Поле IsChild анализируется только в момент вставки нового атрибута. После того, как атрибут (сущность) уже оказался в базе, определение его зависимости/независимости уже происходит по значению d_Global.Owner_id. Немного не допонял. т.е. вы обрабатываете следующую ситуацию (для простоты считаем что речь идет исключительно о "документах"): "Документ" + "Приложение к нему". (Когда приложение - тоже документ, но не живущий без "хозяина", и удаляемый вместе с ним. Причем оно может входить не более чем в один документ (иначе как рулить удалением? считать ссылки?). Если же ссылочный(сущностный) атрибут (некоего "хозяина") может входить во что угодно (справочный - например контрагенты с их структурой) то он неЧайлд? Или же речь о более широком классе случаев? (например мы хотим иметь разные "представления" сущности. Если мы поленились выделить их в нечто выделенное (отличное по хранению от сущностей), то надо помнить, как долго живет данное "представление"? (оно при этом не "приложение" а "другое лицо" той же сущности, и не может входить в более чем одно отношение-связь "хозяин"-"представление" - в точности как и в случае с приложением)? Первое. Но в принципе и на child-сущность можно ссылаться откуда угодно (у нее ведь есть свой GlobalID). Ее зависимость от родителя проявляется только при удалениях. Нельзя удалить родителя без удаления всех его "детей". Родитель разумеется всегда только один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 14:28 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32931258&tid=1546016]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 440ms |

| 0 / 0 |
