powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ООП на сервере
25 сообщений из 139, страница 1 из 6
ООП на сервере
    #34384584
Фотография Shurgenz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришел к нам на работу ДБ девелопер, мне типа в помощь (зачем - непойму, вродеб и так справляюсь)

И начал толкать ООП подход ко всему, что в БД храниться...

типа

авторПонятие класса в базе данных: каждый класс соответствует таблице, запись таблицы является экземпляром класса. Каждый экземпляр класса должен однозначно идентифицироваться в таблице, поэтому в каждой таблице обязательно должно присутствовать поле – ключ объекта. В качестве ключа объекта очень желательно использовать целочисленное значение (суррогатный ключ). При этом данный ключ должен быть уникальным в пределах всей базы, а это значит, что для любого класса БД должен быть один общий предок, назовём его Object, а его ключевое целочисленное поле OID (Object IDentifier). Любой объект БД имеет текстовое наименование, по которому его идентифицирует пользователь в клиентском приложении, поле Name, а также каждый объект должен иметь поле, в котором хранится ссылка на его класс. В результате получаем:

Код: plaintext
1.
2.
3.
4.
5.
6.
Create table Object
(
  OID   int identity( 1 ,  1 ),
  Name  nvarchar( 256 ),
  Class varchar( 32 ) not null,
  Primary key clustered ( OID )
)

авторДля наследника с дополнительными атрибутами необходимо создавать дополнительную таблицу с названием, соответствующим названию класса и обязательным наличием поля OID int not null primary key. По этому полю данные класса наследника соединяются с классом родителем один-к-одному. Создадим класс наследник Subject c дополнительными атрибутами Address (адрес субъекта) и OwnerOID (ссылка на вышестоящего субъекта-владельца, например для склада это компания). Любую ссылку на объект нужно именовать в нотификации <Атрибут>OID, дабы отличить ссылки на объект от обычных числовых или других идентификаторов.
Код: plaintext
1.
2.
3.
4.
5.
6.
Create table Subject
(
  OID      int not null,
  Address  nvarchar( 2000 ),
  OwnerOID int, 
  Primary key clustered ( OID )
)
авторКласс WorkGroup имеет атрибут-коллекцию, состоящую из списка пользователей, входящих в группу. В базе это реализуется в виде такой таблицы:
Код: plaintext
1.
2.
3.
4.
5.
Create table WorkGroup_Users
(
  OID     int not null,  -- ссылка на WorkGroup (this в C#)
  UserOID int not null,  -- ссылка на пользователя
  Primary key clustered ( OID, UserOID )
)

Код: plaintext
1.
2.
3.
4.
Create procedure Object_Open
  @OID int
As
  Select * from Object where OID = @OID
Go

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Create procedure Subject_Open
  @OID int
As
  Select s.*,
         OwnerName = o.Name,
         OwnerClass = o.Class
    From Subject s
           Left join
         Object o
           On o.OID = s.OwnerOID
    Where s.OID = @OID
go

авторПри таком подходе метод Open класса Subject на сервере приложений перекрывает виртуальный метод класс предка и в начале кода вызывает родительский метод. Таким образом именно сервер приложений обеспечивает совокупный вызов всех методов Open от базового класса до текущего.

автор2. Наследование методов реализовано в базе данных

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Create procedure Subject_Open
  @OID int
As
  Select o.*,
         s.Address,
         s.OwnerOID,
         OwnerName = so.Name,
         OwnerClass = so.Class
    From Object o
           Left join
         Subject s
           On s.OID = o.OID
           Left join
         Object so
           On so.OID = s.OwnerOID
    Where o.OID = @OID
Go

Или

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Create procedure Subject_Create
  @OID      int out,
  @Name     nvarchar( 256 ),
  @Class    varchar( 32 )
  @Address  nvarchar( 2000 ),
  @OwnerOID int
As
  Exec Object_Create @OID out, @Name, @Class

  Insert Subject(OID, Address, OwnerOID)
    Select @OID, @Address, @OwnerOID
go
И т.д и т.п.

Впервые если честно с таким встречаюсь... Все мозги запарил... Кто-нить встречался с таким? Как его отфутболить поумнее? Лажа ведь какая-то

Грит, при подходе с классами можно реализовать логику бизнес процесса... млин, в этот бред даже вникать неохота.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384601
Фотография Knyazev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный подход
...
Рейтинг: 0 / 0
ООП на сервере
    #34384602
Фотография Max-xaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напоминает мне одного человека.
Как его зовут? Из какой фирмы пришел?
...
Рейтинг: 0 / 0
ООП на сервере
    #34384612
Фотография Ray D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну подход как похдод, видел и хуже :) единственное, что не надо его преподносить как единственно верный и пихать везде, где только можно.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384620
Фотография Shurgenz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max-xaMНапоминает мне одного человека.
Как его зовут? Из какой фирмы пришел?

Я тебе по Мылу отвечу, в форуме не буду...
...
Рейтинг: 0 / 0
ООП на сервере
    #34384625
Фотография Max-xaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shurgenz Max-xaMНапоминает мне одного человека.
Как его зовут? Из какой фирмы пришел?

Я тебе по Мылу отвечу, в форуме не буду...
max-xam3k@mail.ru
...
Рейтинг: 0 / 0
ООП на сервере
    #34384626
Фотография Shurgenz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ray Dну подход как похдод, видел и хуже :) единственное, что не надо его преподносить как единственно верный и пихать везде, где только можно.

вот вот... я только не пойму, как он собирается его продвигать в нашем проекте... а так может быть подход как подход
...
Рейтинг: 0 / 0
ООП на сервере
    #34384650
Фотография Max-xaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто есть программисты-теоретики, а есть программисты-практики.
Пусть попробует прикинуть сколько времени ему понадобится, чтобы имеющуюся БД переделать под новый механизм. А также пусть оценит скорость ее работы в случае, когда БД достигнет 20-30 гигов. Каждый раз обращаться к списку объектов-субъектов.... жуть!
На прошой работе была не очень большая БД, которую один ботаник захотел переделать под аналогичную структуру. Это у него заняло пол-года, но ничего не сделал. Куча затыков, которые он не смог преодолеть. Результат: крутится та же база, что и была, ботаник научился ее поддерживать.

Так что предложи ему сделать свою и посмотри когда он закончит или скажет что-то типа "У вас гранаты не той системы, ничего не получится". :-)
...
Рейтинг: 0 / 0
ООП на сервере
    #34384657
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гибкость обратно пропорциональна производительности. Поэтому к ООП в базах данных нужно подходить очень вдумчиво.

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


----------------------------------------------------------------
Да полно-те Вам. Не стоит благодарности.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384667
Фотография Shurgenz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я ему уже задаю вопросики... насколько я понимаю, при ООП при каждом инсерте инсертить придется на самом деле в 2+ таблиц (типа в таблицу связи с родителями тоже)

Удалять и селектить то же самое... уже наводит тоску
...
Рейтинг: 0 / 0
ООП на сервере
    #34384670
WiRuc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ООП плохо ложиться на реляционную БД. В теории все выглядит красиво, а на практике просто ужас: низкая производительность, проблемы с массовой обработкой записей и т.д. Вот у вас всего 2 уровень наследования, а уже 2 вставки на сущность Subject. Что будет, если иерархия будет n-уровневой?
Вывод: хорошо для общего развития и небольших БД, не оперирующими миллионами записей.
Если есть желание заюзать именно ООП, то нужно смотреть в сторону ОО СУБД.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384672
MsDatabaseru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скажи ему так
1 что это замечательный подход для разработки принципиально новых проектов в которых требуется унификация для разработчика но не важны фактические показатели быстродействию системы и удобства для дизайна на уровне tsql
2 что на работе подчиненному надо выполнять поставленные задачи, а выбирать концепцию - удел руководителей проектов, обладающих соответствующей квалификацией, хотябы всилу того что всю ответсвенность за реализацию несет именно руководитель и в случае неудач виновать будет он.
3 В случае если нельзя но очень хочется, свои научные или эстетические изыски он может реализовать дома, в свободное от работы время (по другому говоря пусть тренируется на.. кошках)
...
Рейтинг: 0 / 0
ООП на сервере
    #34384675
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShurgenzУдалять и селектить то же самое... уже наводит тоску

Ну, не все уж так тоскливо. Процедура вставки объекта будет содержать вызов процедуры вставки родительского объекта и INSERT в таблицу самого объекта.

На счет подхода - применим, но с умом. И не обязательно в контексте:

авторПри таком подходе метод Open класса Subject на сервере приложений перекрывает виртуальный метод класс предка и в начале кода вызывает родительский метод. Таким образом именно сервер приложений обеспечивает совокупный вызов всех методов Open от базового класса до текущего.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384678
WiRuc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DibrovГибкость обратно пропорциональна производительности.
Золотые слова:) Еще со времен ассемблера пошло. Я бы еще добавил " и удобство разработки".
...
Рейтинг: 0 / 0
ООП на сервере
    #34384687
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiRucООП плохо ложиться на реляционную БД.

Ну, скажем так, я бы не стал называть приведенный подход "реализацией ООП в реляционной СУБД". IMHO, это некое развитие модели, создать одну таблицу документов на все возможные типы документов с кучей полей, допускающих NULL, или прикинуть, и создать некую модель (м.б. и напоминающей наследование) из нескольких таблиц с отношением 1-к-1 и полями NOT NULL.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384700
WiRuc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklinНу, не все уж так тоскливо. Процедура вставки объекта будет содержать вызов процедуры вставки родительского объекта и INSERT в таблицу самого объекта.

Куда уж тоскливей:) Как минимум 1 лишняя вставка. А максимум не ограничен. И табличка Object родительская, на нее идут все вставки. Может такой затык при массированных вставках случиться:) А уж блокировки... А деадлоки, из-за появления "вертикальной" иерархии...
...
Рейтинг: 0 / 0
ООП на сервере
    #34384704
Фотография Shurgenz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin ShurgenzУдалять и селектить то же самое... уже наводит тоску

Ну, не все уж так тоскливо. Процедура вставки объекта будет содержать вызов процедуры вставки родительского объекта и INSERT в таблицу самого объекта.

На счет подхода - применим, но с умом. И не обязательно в контексте:

авторПри таком подходе метод Open класса Subject на сервере приложений перекрывает виртуальный метод класс предка и в начале кода вызывает родительский метод. Таким образом именно сервер приложений обеспечивает совокупный вызов всех методов Open от базового класса до текущего.

Может быть для справочных таблиц, в которых не так уж много записей.. А когда таблицы раздуты и они совсем немаленькие... Ведь для каждого объекта, чтоб выбрать информацию, нужно читать иногда из всех его родителей тоже, да + еще WorkGroup_Users - которая осуществляет многие-ко-многим меж ними... и помножить на степень наследования.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384713
WiRuc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklin WiRucООП плохо ложиться на реляционную БД.

Ну, скажем так, я бы не стал называть приведенный подход "реализацией ООП в реляционной СУБД". IMHO, это некое развитие модели, создать одну таблицу документов на все возможные типы документов с кучей полей, допускающих NULL, или прикинуть, и создать некую модель (м.б. и напоминающей наследование) из нескольких таблиц с отношением 1-к-1 и полями NOT NULL.
По моему в Дейте как раз и описывалась подобная архитектура. Как раз в разделе объектно-ориентированного подхода.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384726
Фотография Shurgenz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiRuc pkarklin WiRucООП плохо ложиться на реляционную БД.

Ну, скажем так, я бы не стал называть приведенный подход "реализацией ООП в реляционной СУБД". IMHO, это некое развитие модели, создать одну таблицу документов на все возможные типы документов с кучей полей, допускающих NULL, или прикинуть, и создать некую модель (м.б. и напоминающей наследование) из нескольких таблиц с отношением 1-к-1 и полями NOT NULL.
По моему в Дейте как раз и описывалась подобная архитектура. Как раз в разделе объектно-ориентированного подхода.

И.... ссылка есть?
...
Рейтинг: 0 / 0
ООП на сервере
    #34384737
WiRuc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shurgenz WiRuc pkarklin WiRucООП плохо ложиться на реляционную БД.

Ну, скажем так, я бы не стал называть приведенный подход "реализацией ООП в реляционной СУБД". IMHO, это некое развитие модели, создать одну таблицу документов на все возможные типы документов с кучей полей, допускающих NULL, или прикинуть, и создать некую модель (м.б. и напоминающей наследование) из нескольких таблиц с отношением 1-к-1 и полями NOT NULL.
По моему в Дейте как раз и описывалась подобная архитектура. Как раз в разделе объектно-ориентированного подхода.

И.... ссылка есть?
У меня книга
...
Рейтинг: 0 / 0
ООП на сервере
    #34384758
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WiRucКак минимум 1 лишняя вставка. А максимум не ограничен. И табличка Object родительская, на нее идут все вставки. Может такой затык при массированных вставках случиться:) А уж блокировки... А деадлоки, из-за появления "вертикальной" иерархии...

Еще раз, я ни кого не пытаюсь убеждать, что это единмтвенно правильный подход. Я всего лишь говорю о возможности его существования. Когда я впревые увидел такой подход - тоже был немного озадачен, но потом таки убедился, что он имеет право на существование.

Затыки при массированной вставке могут быть и без использования такого подхода. Впрочем как и блокировки, так и дедлоки (тьфу, тьфу)...

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

Нате:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
  COUNT(*)
FROM
  dbo.Object

            
----------- 
 48238724 

( 1  row(s) affected)
...
Рейтинг: 0 / 0
ООП на сервере
    #34384760
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShurgenzКак его отфутболить поумнее? Лажа ведь какая-тоНу, например, пусть вспомнит историю возникновения ООП, хотябы утрировано: мол сидела программерская контора и ваяла софт на заказ.
Пока заказчиков было не много и заказы довольно сильно отличались друг от друга, всё шло гладко.
Но вот, повалили заказчики кучей и заказы были как братья близнецы похожи друг на друга, за исключением небольших отличий - кинулись плодить подпрограммы (а ничего ещё кроме процедурного программизма не придумали на то время) и поняли, что так у них под исходники никаких носителей не хватит, да и поддержка такого кода, мяхко говоря - грубо выражаясь...
Вот тут и взялись несколько энтузазистов за "облогараживание" процесса разработки...
Так, или примерно так, и появилось ООП... Красота...
Но, ИМХО, основная цель ООП как была, так и остается - снизить издержки на проектирование софта, но там, где ему не место (РСУБД как раз относится к тем местам, где оно слабо применимо).
Действительно, есть ОО СУБД, вот на них это самое какава. ;-)
Это как параллелизм: 9 женщин не смогут родить за 1 месяц ребенка, но вот за 9 вполне произвести 9.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384791
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShurgenzРезать, к чортовой матери, не дожидаясь перитонита С такой схемой он вас похоронит. Наверняка практического опыта в реализации подобной подхода у него нет, и учиться он будет на вас, а это может дорого стоить.
...
Рейтинг: 0 / 0
ООП на сервере
    #34384810
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA ShurgenzРезать, к чортовой матери, не дожидаясь перитонита С такой схемой он вас похоронит. Наверняка практического опыта в реализации подобной подхода у него нет, и учиться он будет на вас, а это может дорого стоить .+1
...
Рейтинг: 0 / 0
ООП на сервере
    #34384811
WiRuc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pkarklinЕще раз, я ни кого не пытаюсь убеждать, что это единмтвенно правильный подход.

Я понимаю. У нас конструктивный диалог
pkarklin
Затыки при массированной вставке могут быть и без использования такого подхода. Впрочем как и блокировки, так и дедлоки (тьфу, тьфу)...

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

pkarklin
Нате:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  COUNT(*)
FROM
  dbo.Object

            
----------- 
 48238724 
( 1  row(s) affected)

У вас промышленная эксплуатация такой системы? Давайте тогда подробности...
...
Рейтинг: 0 / 0
25 сообщений из 139, страница 1 из 6
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ООП на сервере
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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