|
|
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
А что за декларация, можно полюбопытствовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 14:00 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
U-geneА что за декларация, можно полюбопытствовать? Да та многократно цитированная фраза Страуструпа - мол, ездили беседовать с разработчиками ANSI SQL, долго думали, решили, что объекты ни фига с RDBMS не совместимы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 14:01 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Читал такое у Селко. У Стауструпа не помню. В общем, фигня это всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 14:04 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Дмитрий16 NafВыложил свои мысли по этому вопросу http://mynaf.narod.ru/OQL.html Прошу обсуждения Мне не понравился (очень) один момент. Зачем объеты таскаются целиком? Этоведь эквивалентно "SELECT *" Я сейчас работаю над наложением объектной структуры на классическом MS SQL и пришел к нескольким выводам: 1. Объекты (ID) отдельно, атрибуты отдельно! 2. Чтение из базы объекта НЕ есть чтение ВСЕХ атрибутов. 3. Множество мелких скалярных запросов противопоставить одному большом селекту. Обсудим? 1. Это поддерживается, например в Оракле. Например запрос: Код: plaintext вернёт ссылку на объект o и его значение v. Если прямо сейчас зачение объекта не требуется, то можно получить только ссылку, а позже разименовать эту ссылку в объект операцией deref. 2. Как вариант - ленивая инициализация. ИМХО, имеет смысл только для очень медленных каналов связи при том что каждый отдельный атрибут объекта занимает очень много места и долго передаётся по сети. Например, в оракле для LOB полей можно сначала загрузить из БД только локатор, а затем по мере надобности подгрузить сам LOB или вырезки из него. 3. Накладные расходы на выполнение SQL запроса как правило довольно велики, кроме того запросы Код: plaintext Код: plaintext занимают на сервере БД практически вдвое больше места чем один запрос Код: plaintext учитывая, что в БД могут быть определены миллионы полей, СУБД просто загнётся разбирая миллионы SQL запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 17:06 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Анатолий Иванов модТаблица - это просто массив в терминах ЯП, т.е одна переменная. В СУБД есть понятия схем, подсхем, права доступа, view. Суррогат, но все же. Хм. А разве не таблица - класс, а поля таблицы - переменные/свойства/поля класса? Единственно, что методов у таблицы нет своих собственных для работы со своими данными. Есть понятия класс, объект и компонент. Таблица БД имеет дуальную природу. С обной стороны это запись в словаре БД (спецификация класса реализации), с другой - файл на диске (артефакт, коллекция объектов). Запись в словаре БД определяет для СУБД интерфейс на уровне SQL запросов для доступа к объекту в сегменте таблицы. СУБД является компонентом системы, который реализует поведение класов и объектов системы реализованных таблицами, триггерами и т.д.. Если взглянуть на инкапсуляцию шире, то фактичеки структура данных инкапсулирована, поскольку данные доступны только через API СУБД и SQL запросы. Изменить атрибут объекта мы можем только с помощью команды update и т.д. Триггеры - суть специализированные методы объектов, правда триггеры вызываются на выполнение рекурсивно, в процессе выполнения SQL запроса, а не явно, как обычные методы. Ещё один аспект, это время доступа к данным на диске или даже в кэше СУБД. Поскольку это время гораздо больше, чем время доступа к объекту в оперативной памяти процессе, то чаще мы имеем дело с более-менее точными копиями объектов хранящихся в БД. А раз так, то нам никто не мешает обернуть эти копии соответствующим процедурным интерфейсом, тем самым скрыть от окружающих структуру хранимого объекта или повысить уровень абстракции. По большому счёту, БД это средство асинхронных коммуникаций процессов, реализованное в виде файлов на диске. СУБД позволяет работать с этими файлами на следующем уровне абстракции, рассматривая их как набор таблиц, следующий уровень абстракции определяется Middleware, в частности объектным кэшем, который позволяет абстрагироваться от табличной организации данных и перейти к сетевой структуре, отказаться от SQL запросов в пользу навигации по объектным ссылкам. Следующий уровень - прикладной. Он позволяет наделить объекты некоторым дополнительным поведением, которое невозможно определить на предыдущих уровнях абстракции и скрыть структуру объекта от других объектов системы. ИМХО, как со временем СУБД научились запускать триггеры, так же со времем СУБД или Middleware научатся реализовавывать процедурные интерфейсы объектов, Оракл сделал небольшой наг в эту сторону, к сожалению ограничившись PL/SQL, а пока пишите методы объектов в клиентских приложениях, WEB сервисах и хранимых процедурах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2007, 17:59 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
mcureenab Дмитрий16 Я сейчас работаю над наложением объектной структуры на классическом MS SQL и пришел к нескольким выводам: 1. Объекты (ID) отдельно, атрибуты отдельно! 2. Чтение из базы объекта НЕ есть чтение ВСЕХ атрибутов. 3. Множество мелких скалярных запросов противопоставить одному большом селекту. Обсудим? 1. Это поддерживается, например в Оракле. Например запрос: Код: plaintext вернёт ссылку на объект o и его значение v. Если прямо сейчас зачение объекта не требуется, то можно получить только ссылку, а позже разименовать эту ссылку в объект операцией deref. Из обшения с Дмитрием я знаю, что под Дмитрий16"1. Объекты (ID) отдельно, атрибуты отдельно!" он имел в виду держать все атрибуты в одной колонке типа sql_variant одной таблицы и идентификаторы объектов во второй таблице, имея на всё-про-всё всегда 2 таблицы Вот этот момент мне давно не даёт покоя: А зачем 2 таблицы, а не одна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2007, 14:47 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
softwarer NafРезультатов пока нет. Одна теория пока Это, уж простите, не теория. Это ближе к еще одной цитате: Иногда, глядя с крыльца на двор и на пруд, говорил он о том, как бы хорошо было, если бы вдруг от дома провести подземный ход или чрез пруд выстроить каменный мост,.... Помогите как дать доступ к SQL серверу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2007, 15:28 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Здравствуйте господа. Вот прочитал весь форум и ничего конкретного так и не нашел. Одна вода. Вот кто нибудь скажет конкретно и с как можно меньше философией, как оптимально создать структуру таблиц БД для хранения вот этих ООП классов: Рассмотрим на примере понятия автомобиль: ................Автомобиль {Марка, Производитель, Объем двигателя} ..................../.......................................................\ ...Легковой(Скорость набора 100 км в час)....Грузовой(Грузоподъемность) ......................................................................./................................\ ............................................Самосвал(Объем кузова)....Контейнеровоз(Количество контейнеров) Вот в ООП все гладко и красиво. А вот БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 13:29 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
OxOOFCВот кто нибудь скажет конкретно и с как можно меньше философией, как оптимально создать структуру таблиц БД для хранения вот этих ООП классов: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 14:15 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
OxOOFCЗдравствуйте господа. Вот прочитал весь форум и ничего конкретного так и не нашел. Одна вода. Вот кто нибудь скажет конкретно и с как можно меньше философией, как оптимально создать структуру таблиц БД для хранения вот этих ООП классов: Рассмотрим на примере понятия автомобиль: ................Автомобиль {Марка, Производитель, Объем двигателя} ..................../.......................................................\ ...Легковой(Скорость набора 100 км в час)....Грузовой(Грузоподъемность) ......................................................................./................................\ ............................................Самосвал(Объем кузова)....Контейнеровоз(Количество контейнеров) Вот в ООП все гладко и красиво. А вот БД?если хотим проектировать базы, забываем про ООП, курим внимательно Дейта "Введение в системы баз данных" и др., научаемся, проектируем, вспоминаем ООП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 15:24 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
OxOOFC ................Автомобиль {Марка, Производитель, Объем двигателя} ..................../.......................................................\ ...Легковой(Скорость набора 100 км в час)....Грузовой(Грузоподъемность) ......................................................................./................................\ ............................................Самосвал(Объем кузова)....Контейнеровоз(Количество контейнеров) Вот в ООП все гладко и красиво. А вот БД? А в БД еще красивше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. зы создайте в своем ООП объект Автомобиль и подумайте что будет дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 15:42 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Я знаю как минимум три способа представления наследования в РБД и каждый со своими недостатками. 1. Классично. Один класс = одна таблица. В таблице наследника - только дополнительные поля. Недостатки: 1) Запрос со всеми аттрибутами класса получается путем соединения таблиц (привет производительность). 2. Практично. Один КОНКРЕТНЫЙ класс = одна таблица. Каждая таблица содержит все унаследованные поля. Недостатки: 1) Связи, наследуемые от родительских классов превращаются в неразбериху из множества связей к разным таблицам. Фактически ссылочную целостность приходится обеспечивать ручками. 3. Готично. Втюхивание всех наследников в одну таблицу: модА в БД еще красивше: [src] create table auto ( Марка, Производитель, Объем двигателя Скорость набора 100 км в час Грузоподъемность Объем кузова Количество контейнеров Что тут красивого не пойму. Во-первых, количество контейнеров легковушке ни к чему. Во-вторых, нужно еще поле "Тип", чтобы хоть как-то отличить тягач от мопэда. И поэтому-же желаю веселых свитчей в коде обработчиков. Математическая модель, пространстово состояний, ограничения значений полей и функциональные зависимости у каждого класса на самом деле разные. И связи, если таковые имеются тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 19:04 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
модзы создайте в своем ООП объект Автомобиль и подумайте что будет дальшена то и абстрактные классы, чтоб от них объектов не производить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2007, 19:07 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Спасибо 12345678 за четкий ответ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 06:56 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
12345678на то и абстрактные классы, чтоб от них объектов не производить. Ч.т.д. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 09:22 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
12345678Что тут красивого не пойму. В этом-то и беда (: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 09:23 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
мод 12345678Что тут красивого не пойму. В этом-то и беда (:будет еще красивее, если у тягача появится связь с прицепом. и ту же связь в вашей структуре получат все, вплоть до мопэда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 09:39 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Есть ещё как минимум один способ - "велосипедно-изобретательно", EAV. В самом простом виде: Автомобиль {Идентификатор, Марка, Производитель, Объем двигателя, Тип} Значение параметра автомобиля {Название, Значение, Идентификатор автомобиля} В более сложном: Тип автомобилей {...} Автомобиль {...} Тип параметров автомобиля {...} Допустимое значение типа параметров автомобиля {...} Значение параметра автомобиля {...} Допустимые связи для типа автомобилей {...} Связь между автомобилями {...} 12345678<...>3. Готично. Втюхивание всех наследников в одну таблицу: модА в БД еще красивше: [src] create table auto ( Марка, Производитель, Объем двигателя Скорость набора 100 км в час Грузоподъемность Объем кузова Количество контейнеров Что тут красивого не пойму. Во-первых, количество контейнеров легковушке ни к чему. Во-вторых, нужно еще поле "Тип", чтобы хоть как-то отличить тягач от мопэда. И поэтому-же желаю веселых свитчей в коде обработчиков. Насчёт типа - согласен. А красота здесь - в прозрачности и воспринимаемости. Благодаря этим качествам работу с "готичной" структурой можно быстро реализовать, отладить, продать, и поддерживать легче других. Т.е. и сначала, и потом можно мало работать и много получать: кр-р-расота! 12345678Математическая модель, пространстово состояний, ограничения значений полей и функциональные зависимости у каждого класса на самом деле разные. И связи, если таковые имеются тоже. Корректность заполнения полей можно поддерживать множеством способов, на разных уровнях системы. И от этой поддержки на практике, в отличие от теории, никуда не избавиться. Недостаточно просто написать в тетради что-нибудь наподобие: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 11:06 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
12345678Я знаю как минимум три способа представления наследования в РБД и каждый со своими недостатками. хм... надо же насколько у людей фантазия развита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 11:10 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
12345678 если у тягача появится связь с прицепом. и ту же связь в вашей структуре получат все, вплоть до мопэда. С чего бы это ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 11:16 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
AlexTheRavenЕсть ещё как минимум один способ - "велосипедно-изобретательно", EAV. Логически это то же самое, реализация другая. Тип, вид, категория и пр. - это все поля той же таблицы - ссылки на соотв. классификаторы. От их значений зависит представление - внутр. и внешнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 11:23 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
а в пределе вообще имеем БД из одной таблицы со всеми-всеми полями? красиво? мод 12345678 если у тягача появится связь с прицепом. и ту же связь в вашей структуре получат все, вплоть до мопэда. С чего бы это ?с того, что без доп. ограничений по типу он может быть задан в любой записи. без обработчиков значений полей никогда не обойтись. но когда количество типов составляет несколько десятков, заставляет задуматься необходиомсть обновления их всех при добавлении нового типа, даже если правила, налагаемые на наследуемые поля такие же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 11:43 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Классная тема. Сам не раз думал над этим. Microsoft попробовала решить эту проблему создав Repository. Он реализован в SQL2000. На счет наследования. Эта фича нужна тоько для повторно использования кода. КОДА. База данных предназначена для хранения данных. Если код у Вас это данные то и флаг в руки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 13:46 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
OxOOFCкак оптимально создать структуру таблиц БД для хранения вот этих ООП классов: Сама постановка вопроса некорректна. В БД не надо хранить классы. В БД (если речь про реляционные) хранятся отношения. Если вы не можете взглянуть на мир иначе, чем через призму ООП-шной модели, то это ваши проблемы, а не БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 14:19 |
|
||
|
SQL и ООП
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey OxOOFCкак оптимально создать структуру таблиц БД для хранения вот этих ООП классов: Сама постановка вопроса некорректна. В БД не надо хранить классы. В БД (если речь про реляционные) хранятся отношения. Если вы не можете взглянуть на мир иначе, чем через призму ООП-шной модели, то это ваши проблемы, а не БД. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2007, 14:21 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34605647&tid=1543750]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
94ms |
get tp. blocked users: |
2ms |
| others: | 224ms |
| total: | 426ms |

| 0 / 0 |
