powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / SQL и ООП
25 сообщений из 195, страница 3 из 8
SQL и ООП
    #34897605
Sergey Tokarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Автор
Хм, а вам не кажется странным выражение вида "выбрать поле1, поле2 .. полеН из таблицы бла"?
Вот мне кажется. Потому что при этом нарушается принцип скажем так "атомарности" объекта.

Объект имеет определенное состояние, и это состояние должно быть целостным, т.е. нельзя загрузить объект частично.

На мой взгляд, оптимальным представляется два вида загрузки объектов - "только ключ (ОИД)", и "Объект целиком". При этом, под "Объект целиком" предполагается, что загружаются также и ссылки разных видов (1-много, 1-1, много-много). (Вопросы оптимизации такой загрузки не рассматриваю, их можно загрузить "отложенно", при запросе).


Второй аспект OQL более фундаментален, хоть и связан с тем же свойством "атомарности" объектов.

В СУБД "атомарность" (это не атомарность транзакций) поддерживается на уровне хранения данных. Запись в таблице - это запись в таблице, набор значений, строго определенный и удовлетовлетворяющих определенным ограничениям. В то же время, эта атомарность пропадает на уровне выборки данных, данные - это просто данные, и клиенту, который запросил у СУБД выборку ничего не известно о том, как эти данные получены - вычислила ли их СУБД, или взяла из таблицы, или же еще как-то получила. В этом заключается основа, парадигма СУБД.

Для объектных систем такое не пройдет. "Просто данных" в них нет. В них есть только "Данные объекта". Поэтому выборка из Объектной базы данных должна возвращать некоторую комбинацию ОБЪЕКТОВ.

Здесь я вижу три решения - возвращать комбинацию из объектов существующих классов, или же конструировать новый класс. Или же смешать эти два решения, и вернуть комбинацию объектов + некоторые "вычисленные" данные.

Итак, я пока вижу несколько требований к ОКЛ
Выбираются только объекты целиком
Любая выборка представляет собой набор объектов
Любые агрегаты, вычисляемые поля и т.п. висят отдельно и непонятно где.

Фактически, для ОКЛ сохраняется нету части SELECT [FieldList]. Есть только FROM и WHERE.
...
Рейтинг: 0 / 0
SQL и ООП
    #34897643
Sergey Tokarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналогично, в ОКЛ по идее не должно быть ИНСЕРТОВ, АПДЕЙТОВ и ДЕЛЕТОВ в явном виде, это, опять же, обусловленно "атомарностью" объектов.

С наследованием, в концептуальной части, я проблем как раз и не вижу.
Пишем, к примеру,

SELECT
FROM BaseCar
WHERE
Vendor = "BMW"

и получаем список из всех унаследованных классов. Если указать в части FROM наследника BaseCar, например, HighEndCar, выборка идет только по наследникам.

Насчет ДЖОЙОВ тоже тот еще вопрос. По идее, ДЖОЙНОВ быть не должно, если отношения в ООСУБД задаются в виде ссылок. Джойны применять можно только для объединения классов по значениям полей, но не по ссылкам.

Проблемы при выборке могут вызывать побочные эффекты аксессоров - когда получение значения одного поля изменяет значение другого.
...
Рейтинг: 0 / 0
SQL и ООП
    #34897705
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey TokarevХм, а вам не кажется странным выражение вида "выбрать поле1, поле2 .. полеН из таблицы бла"?
Нет.

Sergey TokarevВот мне кажется. Потому что при этом нарушается принцип скажем так "атомарности" объекта.
А кто его сформулировал и чем он хорош?

Sergey TokarevОбъект имеет определенное состояние, и это состояние должно быть целостным, т.е. нельзя загрузить объект частично.

На мой взгляд, оптимальным представляется два вида загрузки объектов - "только ключ (ОИД)", и "Объект целиком".
Угу. И поехала стандартная бодяга, показывающая безнадежность ОО-модели для данных. Я люблю приводить примером форум: допустим, Вы ходите вывести страничку топиков, указав для каждого топика время последнего сообщения и общее количество сообщений в топике. Дык вот: в этом случае Вы предлагаете не много ни мало, как грузить все топики целиком.
...
Рейтинг: 0 / 0
SQL и ООП
    #34897728
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Tokarev
Хм, а вам не кажется странным выражение вида "выбрать поле1, поле2 .. полеН из таблицы бла"?


Может быть компьютер способен на основе статистики предсказать, какие поля скорее понадобятся и загрузить только их. А остальные подгружать по мере необходимости. Причем хинтом можно подсказать, какие грузить строго, а какие - лениво.
...
Рейтинг: 0 / 0
SQL и ООП
    #34897738
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Tokarev Хм, а вам не кажется странным выражение вида "выбрать поле1, поле2 .. полеН из таблицы бла"?
Вот мне кажется. Потому что при этом нарушается принцип скажем так "атомарности" объекта.

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

объекты же реального мира (как правило) сколь угодно уточняемы (детализируемы). И степень (необходимой нам в некоем рассмотрении) детализации явно зависит от контекста рассмотрения. Т.е. напротив желательно, чтобы для рассмотрении в "легком" контексте не строился тяжеловесный "объект" весь, "целиком" (т.е. в форме, рассчитанной на самый "тяжелый" из заранее предусмотренных контекстов). Так мы приходим к идее реализации контоекстно-зависимых "представлений" (видов) "объектов" в ООП (и в отказе от называния любого экземпляра "т.н. классов" собственно объектом, но - реализацией более или менее глубоко проработанного "представления" т.е. объекты остаются в области идеального (т.е. в модели), а реализуемы только представления. как и должно быть.).
...
Рейтинг: 0 / 0
SQL и ООП
    #34897766
Sergey Tokarev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
....
Угу. И поехала стандартная бодяга, показывающая безнадежность ОО-модели для данных. Я люблю приводить примером форум: допустим, Вы ходите вывести страничку топиков, указав для каждого топика время последнего сообщения и общее количество сообщений в топике. Дык вот: в этом случае Вы предлагаете не много ни мало, как грузить все топики целиком.

а) Я не предлагаю. Я размышляю, что таки для "ОО-модели" придеться грузить. Или хотя бы делать вид, что грузить, физически можно и не загружать данные.

б) Я не агитирую за "ОО-модель для данных". И сам прекрасно понимаю ее недостатки.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Topic
{
   string m_Name;
   
   public string Name {get{return m_Name;}}

   int m_MessageCount;
   public int MessageCount{get{return m_MessageCount;}}

   DateTime m_LastMessageDate;
   public DateTime LastMessageDate{get{return m_LastMessageDate;}}

   private IList<TopicMessage> m_Messages;
   
   public IList<TopicMessage> Messages{get{return m_Messages;}}

}

такой вот пример класса.

Код: plaintext
1.
2.
3.
4.
5.
-- Query 1
SELECT Name, LastMessageDate FROM Topic WHERE oid= 1  INTO :Topic --По аналогии с синтаксисом автора

--Query 2
SELECT Name, LastMessageDate, MessageCount FROM Topic WHERE oid= 1  INTO :Topic 
Такие вот запросы на гипотетическом ОКЛ

Так вот, эти два запроса вернут один и тот же экземпляр класса, по идее, только в одном случае кол-во сообщений будет 0, а в другом - будет реальное количество сообщений. Поэтому явное указание списка полей для выборки может повлечь за собой то, что экземпляры класса будут иметь разные значения полей. Вот и все, что я имел ввиду.
...
Рейтинг: 0 / 0
SQL и ООП
    #34897837
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sandreynikКлассная тема. Сам не раз думал над этим. Microsoft попробовала решить эту проблему создав Repository. Он реализован в SQL2000. На счет наследования. Эта фича нужна тоько для повторно использования кода. КОДА. База данных предназначена для хранения данных. Если код у Вас это данные то и флаг в руки.В том то и дело, что наследование кода в отрыве от наследования структур данных, с которым ему работать, - это полумера. За соответствием одного другому надо следить глазками.
...
Рейтинг: 0 / 0
SQL и ООП
    #34898100
sandreynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer Sergey TokarevХм, а вам не кажется странным выражение вида "выбрать поле1, поле2 .. полеН из таблицы бла"?
Нет.

Sergey TokarevВот мне кажется. Потому что при этом нарушается принцип скажем так "атомарности" объекта.
А кто его сформулировал и чем он хорош?

Sergey TokarevОбъект имеет определенное состояние, и это состояние должно быть целостным, т.е. нельзя загрузить объект частично.

На мой взгляд, оптимальным представляется два вида загрузки объектов - "только ключ (ОИД)", и "Объект целиком".
Угу. И поехала стандартная бодяга, показывающая безнадежность ОО-модели для данных. Я люблю приводить примером форум: допустим, Вы ходите вывести страничку топиков, указав для каждого топика время последнего сообщения и общее количество сообщений в топике. Дык вот: в этом случае Вы предлагаете не много ни мало, как грузить все топики целиком.

Нет проблем.Если следовать ООП здесь объектная модель должна иметь объект КоллекцияТопиков который Должна имеет метод GetPropertiesTopics(TimeLastVisit, AmountMessage ...). Вы получаете все свойства по всем объекта в коллекции. Не вижу противоречий
...
Рейтинг: 0 / 0
SQL и ООП
    #34898113
sandreynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345678 sandreynikКлассная тема. Сам не раз думал над этим. Microsoft попробовала решить эту проблему создав Repository. Он реализован в SQL2000. На счет наследования. Эта фича нужна тоько для повторно использования кода. КОДА. База данных предназначена для хранения данных. Если код у Вас это данные то и флаг в руки.В том то и дело, что наследование кода в отрыве от наследования структур данных, с которым ему работать, - это полумера. За соответствием одного другому надо следить глазками. Нормальная практика когда объект имеет метод или интерфейс Persistance. Вот он пусть и следит.
...
Рейтинг: 0 / 0
SQL и ООП
    #34898240
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sandreynik 12345678 sandreynikКлассная тема. Сам не раз думал над этим. Microsoft попробовала решить эту проблему создав Repository. Он реализован в SQL2000. На счет наследования. Эта фича нужна тоько для повторно использования кода. КОДА. База данных предназначена для хранения данных. Если код у Вас это данные то и флаг в руки.В том то и дело, что наследование кода в отрыве от наследования структур данных, с которым ему работать, - это полумера. За соответствием одного другому надо следить глазками. Нормальная практика когда объект имеет метод или интерфейс Persistance. Вот он пусть и следит.вообще-то за этим должен следить компилятор.
...
Рейтинг: 0 / 0
SQL и ООП
    #34898310
sandreynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
12345678 sandreynik 12345678 sandreynikКлассная тема. Сам не раз думал над этим. Microsoft попробовала решить эту проблему создав Repository. Он реализован в SQL2000. На счет наследования. Эта фича нужна тоько для повторно использования кода. КОДА. База данных предназначена для хранения данных. Если код у Вас это данные то и флаг в руки.В том то и дело, что наследование кода в отрыве от наследования структур данных, с которым ему работать, - это полумера. За соответствием одного другому надо следить глазками. Нормальная практика когда объект имеет метод или интерфейс Persistance. Вот он пусть и следит.вообще-то за этим должен следить компилятор.
Компилятор следит за тем что декларировано в синтаксисе языка. Значит просто надо написать другой компилятор для другого языка.
...
Рейтинг: 0 / 0
SQL и ООП
    #34898385
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sandreynikКомпилятор следит за тем что декларировано в синтаксисе языка. Значит просто надо написать другой компилятор для другого языка.это который будет сам генерировать структуру данных для описанных классов?
к чему же это мы пришли?)))
...
Рейтинг: 0 / 0
SQL и ООП
    #34898641
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Tokarev2Автор
Хм, а вам не кажется странным выражение вида "выбрать поле1, поле2 .. полеН из таблицы бла"?В самом ООП один объект запрашивает у другого значения свойств 1, 2 ... N, а не "объект целиком". И нет никакого нарушения целостности ибо свойства только читаютя. Вот если бы они измененялись без проверки методами доступа - было бы нарушение целостности.

Действительно типичный пример, когда ООП понимают неправильно и пихают не туда куда надо.
Зачем клиенту запрашивать сами сами объекты с сервера, если он может работать с ними через свойства и методы? Если же каждому серверному объекту сопоставлен клиентский - то их личное дело, какими данными и через что они обмениваются. Можно и через самый примитивный SQL, если серверные объекты прикручены триггерами к данным.
...
Рейтинг: 0 / 0
SQL и ООП
    #34899593
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer U-geneА что за декларация, можно полюбопытствовать?
Да та многократно цитированная фраза Страуструпа - мол, ездили беседовать с разработчиками ANSI SQL, долго думали, решили, что объекты ни фига с RDBMS не совместимы.
У Селко
/topic/374405&pg=9#4259111
...
Рейтинг: 0 / 0
SQL и ООП
    #34899594
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модТе же грабли
отношение1=отношение2 операция отношение3 - работает
объект1=объект2 операция объект3 - просто чушь

An Imperative Object Calculus. Martin Abadi And Luca Cardelli,
Towards Object - Oriented Refinement Calculus, Jamie Shield
Object - Oriented Programming in Explicit Mathematics: Towards The Mathematics of Objects, Thomas Studer von Werthenstein
и т.д.
...
Рейтинг: 0 / 0
SQL и ООП
    #34900384
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizAn Imperative Object Calculus. Martin Abadi And Luca Cardelli,
Towards Object - Oriented Refinement Calculus, Jamie Shield
Object - Oriented Programming in Explicit Mathematics: Towards The Mathematics of Objects, Thomas Studer von Werthenstein
и т.д.А где нам эти книги почитать, вот вопрос. Я бы с удовольствием почитал. В электронном виде нет, хотя бы конспективно?
...
Рейтинг: 0 / 0
SQL и ООП
    #34901020
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://lucacardelli.name/
...
Рейтинг: 0 / 0
SQL и ООП
    #34903257
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я еще собрал там
http://agp1.nm.ru/
...
Рейтинг: 0 / 0
SQL и ООП
    #34903687
Dmitriy Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s> Автор: sandreynik
12345678> В том то и дело, что наследование кода в отрыве
12345678> от наследования структур данных, с которым ему
12345678> работать, - это полумера. За соответствием одного
12345678> другому надо следить глазками.
s> Нормальная практика когда объект имеет метод или
s> интерфейс Persistance. Вот он пусть и следит.
12345678> вообще-то за этим должен следить компилятор.
s> Компилятор следит за тем что декларировано в синтаксисе языка.
s> Значит просто надо написать другой компилятор для другого языка.

То, за чем должен следить компилятор, а что проверяется в момент выполнения,
зависит от степени типизации языка программирования: статическая или
динамическая.

Аналогичо, нормальность практики размежевания полей и методов доступа
варируется от языка к языку.

12345678> Зачем клиенту запрашивать сами сами объекты с сервера,
12345678> если он может работать с ними через свойства и методы?
12345678> Если же каждому серверному объекту сопоставлен клиентский
12345678> - то их личное дело, какими данными и через что они
12345678> обмениваются. Можно и через самый примитивный SQL,
12345678> если серверные объекты прикручены триггерами к данным.

Соверженно верно. Ввиду слабой совместимости моделей данных нереально
полагаться на то, что какому-нибудь чудо-вендору удасться зашить ООП в
реализацию SQL на сервере. Современые "объектные расширения" на серверных
платформах - это убожества по сравнение с тем, что предоставляют полноценные
системы программирования для клиента.

Практичнее иметь чёткое разделение: SQL - на сервере, "настоящие" объекты -
на клиенте. Правда, достаточность примитивного SQL для клиента спорна.
Использование "плоских" предложений ввиде строк весьма утомительна для
программирования.

Пример удачной интеграции - CommonSQL, разработанный фирмой Xanalys (ныне
LispWorks) около десяти лет назад, см., например:

http://www.lispworks.com/documentation/lw50/LWUG/html/lwuser-268.htm
(Имеются и реализации в открытом коде.)

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

- определения классов, экземпляры которых отображаются в записи РБД
(наиболее просто реалзиуется подход "2. Практично. Один КОНКРЕТНЫЙ класс =
одна таблица").

- операции выборки и сохранения.

Пример:

(def-view-class employee (standard-db-object)
((employee-number :db-kind :key
:column empno
:type integer)
(employee-name :db-kind :base
:column ename
:type (string 20)
:accessor employee-name)
(employee-department :db-kind :base
:column deptno
:type integer
:accessor employee-department)
(employee-job :db-kind :base
:column job
:type (string 9))
(employee-manager :db-kind :base
:column mgr
:type integer)
(employee-location :db-kind :join
:db-info (:join-class department
:retrieval :deferred
:set nil
:home-key employee-department
:foreign-key department-number
:target-slot department-loc)
:accessor employee-location))
(:base-table emp))


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL и ООП
    #34903766
sandreynik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL это всего лишь база данных. Вдумайтесь!! ДАННЫХ. Зачем козе баян. Объект содержит в себе как функционал (код) так и данные. Причем данные он может хранить не только в БД но и в XML файле, в простом файле(Картинки) и т.д. Что бы не привязываться к одному источнику хранения и надо иметь у класса интерфейс Persistance. Который и будет следить как за хранением так и за подкачкой.
...
Рейтинг: 0 / 0
SQL и ООП
    #34903861
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sandreynikвсего лишь база данных. Вдумайтесь!! ДАННЫХ. Зачем козе баян.
чтобы не скучно было.
...
Рейтинг: 0 / 0
SQL и ООП
    #34904499
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПрактичнее иметь чёткое разделение: SQL - на сервере, "настоящие" объекты -
на клиенте.А если клиент веб-страница или что-то еще более примитивное - где тогда будут объекты - на сервере приложений? А если клиентов с объектами несколько разных, кто будет отвечать за соответствие заложенной в них логики?

Вот в том-то и дело, что хотелось бы иметь реализацию всей логики, обрабатывающей вводимые данные на сервере, и желательно сервере БД (так и секурнее и централизованнее и быстрее и проще кажется). А на деле получается - кусочек логики в БД, кусочек в серверном приложении, кусочек в клиентских - арррр(((.

авторSQL это всего лишь база данных. Вдумайтесь!! ДАННЫХ.А я думал, что SQL это язык запросов.
...
Рейтинг: 0 / 0
SQL и ООП
    #34904739
Dmitriy Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> автор
>> Практичнее иметь чёткое разделение: SQL - на сервере, "настоящие"
>> объекты - на клиенте.
> А если клиент веб-страница или что-то еще более примитивное - где
> тогда будут объекты - на сервере приложений?

Разумеется, на сервере приложений. Объекты в браузерах довольно зачаточные.

> А если клиентов с объектами несколько разных, кто будет
> отвечать за соответствие заложенной в них логики?

Отчасти - сервер БД (общие ограничения целостности), отчасти - клиент или
сервер приложений.

> Вот в том-то и дело, что хотелось бы иметь реализацию всей логики,
> обрабатывающей вводимые данные на сервере, и желательно сервере БД
> (так и секурнее и централизованнее и быстрее и проще кажется). А на
> деле получается - кусочек логики в БД, кусочек в серверном
> приложении, кусочек в клиентских - арррр(((.

Это достойный идеал, но на практике всегда будет иначе. Конечно, в
трехзвенке следует сокращать роль оконечных Web-клиентов.

ИMХО
1) Возможности программирования на браузерах слишком преувеличены, если не
сказать "раздуты", их производителями. Конечно, браузер может поддерживать
пародию на объекты, обычно с помощью плагинов, но тогда чем он лучше
специализированного клиента?

2) Зачастую HTTP протокол является существенным ограничителем по сравнению с
"родными" клиентскими протоколами СУБД.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
SQL и ООП
    #34904767
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12345678А на деле получается - кусочек логики в БД, кусочек в серверном приложении, кусочек в клиентских - арррр(((.
Это у кого как. Например есть единое приложение, а где исполняются его кусочки - на сервере или клиенте - дело десятое (и переменное).
12345678А я думал, что SQL это язык запросов.
SQL - это декларативный язык программирования.
...
Рейтинг: 0 / 0
SQL и ООП
    #34904885
12345678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модЭто у кого как. Например есть единое приложение, а где исполняются его кусочки - на сервере или клиенте - дело десятое (и переменное).Не складывается. Приложений с одной БД в общем случае работает множество и сделанных разными производителями на разных языках. Упаковать все в одно приложение - задача сложная, а иногда бессмысленная. Что обеспечит координацию тех самых функциональных зависимостей между разными приложениями при модернизации системы - вопрос открытый.

Либо второй вариант - доступ к базе данных накрывается единым серверным приложением, а все клиенты действуют через него. Соответсвенно, вместо SQL для изменения данных клиенты пользуют уже какое-то самодельное API серверного приложения. А как же реляционная алгебра и все такое? Все равно остается вопрос координации изменений кода приложения с потребным изменением структуры данных и наоборот. Ручками.

И почему для реализации такого приложения недостаточно средств самой СУБД, а требуется реализация "на разных уровннях" системы?
...
Рейтинг: 0 / 0
25 сообщений из 195, страница 3 из 8
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / SQL и ООП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]