|
|
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
_модНу, например так: 1. таблица ID всех объектов всех классов 2. таблица всех свойств всех объектов всех классов обычный EAV Хватит, не надо! )) Точнее имеет право на жизнь, но только в определенных ситуациях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 12:42 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
NafХватит, не надо! )) Точнее имеет право на жизнь, но только в определенных ситуациях просто как пример (практический !) решения задачки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 15:09 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Насчет EAV - хороший вопрос. Я бы сказал, что доля истины в этом есть. EAV действительно позволяет представить данные объектов в виде набора отношений. Однако при этом на реляционное хранилище накладывается такие ограничение, которое уничтожают все возможности, которые изначально присущи реляционным системам. Когда говорят об объектах, то обычно (точнее все и всегда кроме меня, конечно:) ) подразумевают объекты, являющиеся результатом эволюции систем программирования фон-неймановских машин с адресуемой линейной памятью . Как результат, мы имеем систему, которая заменила адреса на некую семантику. В простейшем случае, пара "OID + имя атрибута (свойства)" (о которой Вы говорите) является точным аналогом пары "адрес + смещение", дающая точный адрес какого-то скалярного значения. При этом сама семантика преобразуется в тоже скалярное значение (значение смещения) Так вот. EAV пытается в лоб эмулировать линейную память. Этот подход ассоциирует пару "OID + имя атрибута (свойства)" со скалярной (и никакой иной!) величиной свойства. Семантика (имя свойства) используется как скалярное значение , с которым эта хранимая величина ассоциирована. Тем самым реляционное хранилище низводится до линейного хранения множества скаляров. От возможностей реляционной модели при этом ничего по сути не остается. Взять например банальную накладную, где есть заголовок и множество строки. Как ее представить в EAV? Сколько строк в разных таблицах на это уйдет? Как вообще в EAV представить множество? Вопросов по EAV можно здесь нарыть. В RxO системе данные о накладной (предполагаем, что все компоненты реализованы как хранимые), будет хранится в двух таблицах (то есть, фактически, привычным способом). При этом семантика сложных структур будет полностью сохранена сохранена в именах и в заголовках этих таблиц. Еще одно принципиальное различие.Но я сначала у Вас уточню. Насколько я понимаю, EAV есть попытка отображения объектов в реляционную БД. В какой-то программе есть объект, данные о котором надо сохранить в реляционной БД. Соответственно, некое скалярное значение (свойства) копируется из памяти, занимаемой программой в строку EAV таблицы, а потом, по мере надобности, наоборот, восстанавливается из таблицы в память, занимаемую объектом. Это так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 16:15 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-geneТем самым реляционное хранилище низводится до линейного хранения множества скаляров. От возможностей реляционной модели при этом ничего по сути не остается. Это да U-geneВзять например банальную накладную, где есть заголовок и множество строки. Как ее представить в EAV? Одна строка в таблице объектов, K+NxM строк в таблице свойств, где K - число полей шапки накладной, N - число строк накладной, M -число полей строки накладной U-geneВ RxO системе данные о накладной (предполагаем, что все компоненты реализованы как хранимые), будет хранится в двух таблицах (то есть, фактически, привычным способом). При этом семантика сложных структур будет полностью сохранена сохранена в именах и в заголовках этих таблиц. Сложно в реализации: меняется структура класса - надо менять структуру его таблиц и менять программы, заточенные на старую структуру. И все в автомате ! U-geneНасколько я понимаю, EAV есть попытка отображения объектов в реляционную БД. В какой-то программе есть объект, данные о котором надо сохранить в реляционной БД. Соответственно, некое скалярное значение (свойства) копируется из памяти, занимаемой программой в строку EAV таблицы, а потом, по мере надобности, наоборот, восстанавливается из таблицы в память, занимаемую объектом. Это так? При работе пользователя с конкретным объектом (изменение свойств или просто посмотреть) - так. При массовой обработке объектов (отчеты) выбираются только нужные свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 16:39 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
авторменяется структура класса - надо менять структуру его таблиц и менять программы, заточенные на старую структуру. Я можно поподробнее - какие структуры, где они, как вы себе процесс представляете? Просто у меня впечатление, что Вы мыслите отображением (переносом, копированием, сохранением) значений объектов, существующих в памяти программ в таблицы реляционной БД. Соответственно, в вашем понимании речь идет о согласовании разных структур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 17:08 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-geneЯ можно поподробнее - какие структуры, где они, как вы себе процесс представляете? Структура классов д.б. описана любым способом - хоть простым текстом. Структура БД - таблиц должна соответствовать структуре классов. Следовательно , меня первое надо менять и второе. И что делать с программами - не понятно. С EAV все просто - структура БД не меняется никогда, соответсвенно не меняются программы. U-geneСоответственно, в вашем понимании речь идет о согласовании разных структур. Меняющаяся структура классов отображается в фиксированную структуру БД по определенным правилам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 17:20 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Еще раз спрошу. Вы мыслите отображением (переносом, копированием, сохранением) значений объектов, существующих в памяти программ в таблицы реляционной БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 17:27 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-geneВы мыслите отображением (переносом, копированием, сохранением) значений объектов, существующих в памяти программ в таблицы реляционной БД? Нет, в памяти хранятся не объекты ( в терминах ООП), а копии строк БД, соотв. объекту. А чаще просто выбираются конкретные свойства - скаляры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 17:34 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Я от Вас прямого ответа добиться не могу. Скалярные значения из памяти в рел БД по Вашему переносятся или нет? (будь они оформлены как объекты, копии строк или что то еще) перенос скаляров(копирование) из памяти программы в БД по Вашему обязателен, для того, что бы утверждать, что объекты существуют? Вот эта мысль Сложно в реализации: меняется структура класса - надо менять структуру его таблиц и менять программы, заточенные на старую структуру. И все в автомате ! она вообще откуда взялась? Кто вам это сказал? Вы это так утверждаете, как будто я меняю класс и потом для этого изменения должен отдельно согласовывать структуру таблиц (собственно я поэтому с вопросам и присаю). Но это не так. Программа, заточенная на структуру - это что? RxO система вполне самодостаточна. Никаких внешних специально заточенных программ не нужно. Модель предметной области создается и поддерживается целиком на сервере. Этой моделью можно откуда угодно. А если мы поменяли модель на сервере, то естественно запросы тоже могут требовать изменения... Но это замечание к объектам никак не относится. С таблицами абсолютно такая же ситуация. Кстати С EAV все просто - структура БД не меняется никогда, соответсвенно не меняются программы. То есть классы совсем не меняются? А если надо будет вдруг тип свойства поменять. Было INT, вдруг нужно LONG? Как в EAV это решается? Кстати, вы собственно статью, где система описывается, прочитали?(это простой вопрос, он требует ответа "да" или "нет") А то я заметил, что многие пытаются сделать выводы исключительно на своих представлениях. Хотя, вместо того, что бы догадки строить, можно прочитать. RxO - это вообще о другом, чем EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 18:22 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-geneПрограмма, заточенная на структуру - это что? RxO система вполне самодостаточна. Никаких внешних специально заточенных программ не нужно. Модель предметной области создается и поддерживается целиком на сервере. Этой моделью можно откуда угодно. А если мы поменяли модель на сервере, то естественно запросы тоже могут требовать изменения... Но это замечание к объектам никак не относится. С таблицами абсолютно такая же ситуация. Ну, это и есть фигня. 1. Никакие запросы НЕ должны меняться. 2. Нельзя менять мудель, если эта версия этой мудели законтрактована (или контрагенты должны автоматом настроиться на новую модель интерпретировав семантику изменений - кароче послать мудель нафиг, если невозможно интерпретировать и настроиться). U-geneКстати То есть классы совсем не меняются? А если надо будет вдруг тип свойства поменять. Было INT, вдруг нужно LONG? Как в EAV это решается? Очень просто. Просто меняется тип свойства и все. Прога при этом не меняется (если, конечно, приличная прога :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 18:35 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Это все конечно здорово но вы таки не ответили на мой самый первый вопрос: задлянафига это все нужно. Зачем я буду напрягать свой моск, зачем новички будут учить старый добрый SQL, и новый злой SQL++ Без ответа на этот вопрос, понятного даже такому ретрограду как я, в терминах которые можно измерить без определений типа модно, круто, современно, можно до хрипоты спорить об реализациях, но оно все равно не взлетит. U-gene0) ничего не исчезает - по-прежнему можно использовать обычные для SQL табличные структутры. То есть появляется только дополнительный интерфейс к базе, милый сердцу объектникам. То есть об экономии речи не ведется, разработчики СУБД должны тратить ресурсы, плодить баги и т.п. реализуя эту фичу и что же получая взамен. U-gene1) Появляются классы.Афигеть какое преимущество. U-geneвместо того, что бы делать JOIN, использовать точечную нотацию. Типа набирать меньше То есть вы привели два слабых пустых аргумента, которые меня ни в чем не убеждают. Да хрен бы со мной, но оно не убедит и других U-gene2) Появляется возможность использования ссылок между классами.Если под ссылкой вы имеете ввиду, дополнительное неявное ограничение налагаемое на параметр в процедуре, то я согласен, смысл имеет U-geneПо сути речь идет о динамическом UNION, который автоматом может подтягивать данные из разных источников. В обычном SQL такого не достичь... точнее, каждый раз, когда появляется новая разновидность данных, которая должна попасть в какой-то результирующий отчет, мы этот отчет должны обязательно править руками, явно добавляя туда источник новой разновидности.А чем вам вьюха не угодила U-gene4) Собственно запросы к классам. Запросы к классам основаны на О-видахЧем ваши О-виды лучше старого доброго, отлаженного SQL, известного многим. Я сомневаюсь, что вы хотите стать новым гуру и стричь купоны на лекциях, семинарах и книжках. U-gene5) Методы инкапсулированы в классе и полиморфны. Допускается групповой вызов методов.Пример задачи, решение которой старыми методами громоздко, некрасиво, подверженно ошибкам. Еще раз U-gene это вы попросили нас оценить вашу концепцию. Это вы должны доказывать что ваши расширения имеют право на жизнь. Я мыслю, что объекты в программировании были внедрены чтобы упростить жизнь разработчикам заменив линейный список процедур иерархическим списком объектов. Еще раз повторю - приведите пример success story - база: тысячи таблиц и вьюх, десятки тысяч процедур, длительный срок разработки разными разработчиками, отвратительная документация, не следование соглашениям о наименованиях, короче ад для поддержки, а вот если бы использовать вашу придумку то ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 19:33 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
1. Никакие запросы НЕ должны меняться. Да ну? Оригинальный подход. По мне запросы могут быть вообще любыми - в рамках текущей схемы, конечно. 2. Нельзя менять мудель, если эта версия этой мудели законтрактована (или контрагенты должны автоматом настроиться на новую модель интерпретировав семантику изменений - кароче послать мудель нафиг, если невозможно интерпретировать и настроиться). А это проблема клиента. Схема открыта, пусть интерпретирует и настраивается, если надо. Я еще раз повторяю - вопрос изменения схемы не зависит от того, имеем мы дела с таблицами или с классами. Очень просто. Просто меняется тип свойства и все. Прога при этом не меняется (если, конечно, приличная прога :)) Тоже загадка. Где меняли, зачем меняли? Ктсати, я правильно понимаю, что вот здесь, с 16-го по 32-й слайд - это и есть EAV? В любом случае, я EAV рассматриваю как очень частное решение применимое в очень конкретном ряде случаев. При этом, что самое главное, я вообще не рассматриваю EAV как альтернативу RxO-системе. EAV - это отображение объектов из программы в РБД. RxO-система - это существование объектов на стороне сервера (программы вообще не требуются) который сохраняет все возможности РСУБД ( кстати, если угодно - EAV можно реализовать на сервере, реализующем RxO.... не знаю зачем, но можно). Это идейно разные вещи. поэтому давайте про EAV закроем тему. Если хочется поточить когти на эту тему, можно возобновить это обсуждение. Я там кстати, уже задал вопросик. PS. Я, кстати, не в коем случае не утверждаю что RxO-система есть общее решение для всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 20:11 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
2 SERG 1257 Я вот на эту фразу наткнулся То есть появляется только дополнительный интерфейс к базе, милый сердцу объектникам а дальше вопросы читал невнимательно. Какой дополнительный интерфейс, извините? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 20:16 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-gene Какой дополнительный интерфейс, извините?Я так понимаю что база остается базой, таблицы таблицами, а также вьюхи и процедуры. То есть с базой можно будет работать по старинке, обеспечивая обратную совместимость. ПЛЮС вы добавляете еще одну возможность работы с базой - через классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 20:30 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
SERG1257 ПЛЮС вы добавляете еще одну возможность работы с базой - через классы Да. Но где Вы при этом нашли какой-то дополнительный интерфейс, мне не понятно. Впечатление, что Вы решили, что я пытаюсь изобразить какие-то интерфесные классы. или какую то ORM подсистему, которую надо использовать в ОО-программах, или еще какую-то хрень, которую можно охарактеризовать как "дополнительный интерфейс". Это не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 20:39 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-gene EAV - это отображение объектов из программы в РБД. RxO-система - это существование объектов на стороне сервера (программы вообще не требуются) Объекты не в ЕАВ или в СУБД, они воще то в Модели предметной области. Проги (так же и СУБД) должны создавать свои непротиворечивые представления этой модели исходя из описания модели. При изменении модели меняются представления и если какая та прога (так же СУБД) не могет это, то на свалку ее. (На счет изменеия запроса - однаждын написанный запрос (прога, которая все еще нужна без переделок) должен работать и при измененной модели). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 20:57 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Хорошо поставим вопрос иначе - поддерживает ли ваша база обычный SQL. Есть ли у вас обратная совместимость? Если совместимости нет, то вам будет легче показать достоинства вашего подхода, но придется реализовывать туеву хучу всякой обвязки - драйверов, компонент, утилит и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 21:01 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Уважаемый SERG1257 , Если прочитали бы статью (хотя бы пару станиц), вопрос "поддерживает ли ваша база обычный SQL?" вообще бы не встал. То есть Вы ввязались в спор даже не удосужившись ознакомится с предметом обсуждения. Ну это же не серьезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 21:10 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
авторОбъекты не в ЕАВ или в СУБД, они воще то в Модели предметной области. Проги (так же и СУБД) должны создавать свои непротиворечивые представления этой модели исходя из описания модели. А можно система тоже будет поддерживать классы и объекты? Ну...хотя бы для того, что бы уменьшить разрыв между инфологичекой моделью и ее датаологическим представлением? В идеале - что бы они вообще не отличались? авторПри изменении модели меняются представления и если какая та прога (так же СУБД) не могет это, то на свалку ее. (На счет изменеия запроса - однаждын написанный запрос (прога, которая все еще нужна без переделок) должен работать и при измененной модели). Опять какая то программа. Ну что ты будешь делать. Нет никакой программы. Не нужна она. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 21:36 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Неменее уважаемый U-gene Статью я дочитал, предыдущий запрос снимается. Но я таки не нашел чем (при каких обстоятельствах) ваша RxO система лучше уже имеющихся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 21:38 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
Если я отвечу "приблизительно тем же, чем С++ лучше С." не уверен, что вас этот ответ устроит. Но именно так.Он позволяет описывать предметную область в ОО-терминах, позволяет реализовывать это описание, поддерживает активное существование объектов, обеспечивает манипуляции над группами объектов, запросы к классам, оставаясь при этом полностью реляционным и полностью совместимым с традиционным SQL. Вы пример с одним единственным запросом к классу (точнее к нескольким классам) прочуствовали? Как к этому запросу система , по мере наследования класса и изменения реализаций его компонентов, автоматом добавляет новые источники, новые алгоритмы расчетов. Как система вызывает метод для группы объектов, и для объектов разных классов выполняется своя реализация этого метода. Говорят, что SQL - декларативный язык, что вместо вопроса "как вычислять" он отвечает на вопрос "что вычислять". Так RxO система - следующий шаг в этом же направлении. Мы отвечаем на этот же вопрос, но используем уже не имена таблиц, а имена, которыми мы описывали сложные структуры. Мы , когда это нужно, инкапсулируем этот вопрос и, при необходимости меняем реализующее его выражение. И так далее. Вы совсем до конца дочитайте :) может у Вас и другие вопросы снимутся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 22:22 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-gene, н уне программа, а интерпретатор метаданных модели как хошь называй если нет интерпретации, то модель нафиг никому не нужна, это уже теория :):):) классы и т.д. тож воще то нафиг не нужны, но так как имеющиеся средства разработки оперируют ими, то приходится генерировать их, что бы могли пользоваться редактором текст, типа нажал точку и вывалились внутренности, если бы написать свой редактор, то можно было бы классы не генерировать, а по другму реализвать подмогу прогеру ну это уже из другой оперы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2011, 23:02 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
[quot U-gene]Скалярные значения из памяти в рел БД по Вашему переносятся или нет?[quot ] Ессно да. А как еще значения могут попасть в БД ? [quot U-gene]как будто я меняю класс и потом для этого изменения должен отдельно согласовывать структуру таблиц (собственно я поэтому с вопросам и присаю). Но это не так.[quot ] Вы добавили новое св-во в класс, надо добавить столбец в таблицу. Надо, что-бы ваши программы увидели этот столбец и т.д. [quot U-gene]А если надо будет вдруг тип свойства поменять. Было INT, вдруг нужно LONG? Как в EAV это решается?[quot ] По разному. Чаще всего значения св-в хранятся в varchar2(много) U-geneRxO - это вообще о другом, чем EAV. Так есть только два способа отобразить объекты на таблицы: традиционный и EAV (или еще как в Каше - все в одну строку) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2011, 10:07 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
U-geneЕсли я отвечу "приблизительно тем же, чем С++ лучше С." не уверен, что вас этот ответ устроит. Но именно так.Он позволяет описывать предметную область в ОО-терминах, позволяет реализовывать это описание, поддерживает активное существование объектов, обеспечивает манипуляции над группами объектов, запросы к классам, оставаясь при этом полностью реляционным и полностью совместимым с традиционным SQL. когда я в самом начале 11544005 задал неявный вопрос вы "надулись"... тем не менее я попробую ещё раз... зАчем описывать предметную область в ОО-терминах в контексте SQL (только не надо про "удобно" этак мы в софистику скатимся)? и ваш пример с С и С++ не корректен тут скорее С++ и Haskell в который пытаются тулить ОО парадигму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2011, 10:56 |
|
||
|
OO расширения SQL.
|
|||
|---|---|---|---|
|
#18+
ДедушказАчем описывать предметную область в ОО-терминах[/u] в контексте SQL Ну вообще еще Постгри в ОРМД предпринял шаги. А теперь и Оракл прикручивает. Причина - ответ ООбэдешникам. Очевидно, есть Приложения БД, где чиста РМД не адекватна. Но может ОРМД одеватна буит. Кто знает? Напрмер, для поддержки геоинформационных Оракл в 8 версии еще юзал РМД, на начиная с 9 ОРМД. А счас у него 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2011, 11:54 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37517000&tid=1541920]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 531ms |

| 0 / 0 |
