Entity Bean - physical table

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Entity Bean - physical table

Post by Sabina »

Опять передо мной выдвинули задачу...

Is there to be one Entity Bean class per database table? If so, then must we perform joins on the application server instead of in the database? That is awful. If we were to perform joins in the database, then the result set would be some hybrid table and, therefore, would not correspond to any one table.
Should we have an Entity Bean class for temporary tables resulting from joins? If there will not be one Entity Bean class per database table, then what do the
Entity Bean classes correspond to? How do we map objects to database tables in a way that allows one to harness the powere of the database? This is a tough
problem. The literature calls it "impedence mismatch", a term that the community borrowed from Electrical Engineering.


Я считаю, что необязательно one entity per table, хотя в большинстве случаев именно так. Что касается joins, они наверняка сидят где-нибудь в stored procedures, стало быть в базе, а аппликация только делает из них select.
И при чем тут "Should we have an Entity Bean class for temporary tables resulting from joins". Ведь entity bean представляет объект, то есть если объект проектируется на несколько физических таблиц, зачем писать entity bean на каждую физическую таблицу? Entity она и есть entity, а не физическая таблица.

Прошу аксакалов покритиковать, если я где неправа.

Спасибо,
Сабина
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Вы делаете успехи. Абсолютно серьезно. :)
На самом деле для меня, как для "старого" базовика :oops:, дизайн базы данных всегда первичен, а потом уже идут всякие beans, ado.net и всякие другие приблуды - и именно они IMHO должны подстраиваться под базу а не наоборот. Когда делается наоборот в 80% случаев проект через некоторое время имеет бледный вид.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

JustMax wrote:Вы делаете успехи. Абсолютно серьезно. :)
На самом деле для меня, как для "старого" базовика :oops:, дизайн базы данных всегда первичен, а потом уже идут всякие beans, ado.net и всякие другие приблуды - и именно они IMHO должны подстраиваться под базу а не наоборот. Когда делается наоборот в 80% случаев проект через некоторое время имеет бледный вид.


JustMax, жму Вашу руку !
особенно меня насторожила фраза

That is awful. If we were to perform joins in the database, then the result set would be some hybrid table and, therefore, would not correspond to any one table.

Явно писанная привеженцем идеологии 'База это чтото странное и непонятное. Лучше мы все на клиенте сделаем'
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

JustMax wrote:Вы делаете успехи. Абсолютно серьезно. :)
На самом деле для меня, как для "старого" базовика :oops:, дизайн базы данных всегда первичен, а потом уже идут всякие beans, ado.net и всякие другие приблуды - и именно они IMHO должны подстраиваться под базу а не наоборот. Когда делается наоборот в 80% случаев проект через некоторое время имеет бледный вид.


И причина этому на мой взгляд такова что именно база обычно является узким местом в смысле производительности.
Поэтому дизайн делается не так как удобнее програмить а так как быстрее будет работать
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Strannik223 wrote:И причина этому на мой взгляд такова что именно база обычно является узким местом в смысле производительности.
Поэтому дизайн делается не так как удобнее програмить а так как быстрее будет работать


Сразу после ваших слов вспомнился фундаментальный проект. В 1995-96 году организация POSC (Petrotechnical Open Software Corporation) попробовала создать универсальную модель базы данных для нефтяной компании. Они собрали экспертов по всем направленям и сильных программистов. Написали объектно-ориентированную модель Epicenter, с использованием языка EXPRESS. Причем проект был в очень зрелой стадии - были написаны всякие специфические leader-ы, проведена огромная работа по соотвествию стандартам по каждому направлению.
Многие фирмы уже начали писать программные продукты на основе этой модели, а POSC отвоевывал право быть стандартом по всей нефтяной промышленности.

Я тогда работала на французскую фирму, которая начала писать банк данных для нефтяной компании. Поскольку проект грандиозный, они написали каркас и потом сразу стали искать заинтересованных клиентов, чтобы это дело далее финансировать. Добрались и до российского Лукойла. Мне тогда повезло, я под это дело съездила в Англию и Францию на учебу по поводу Epicenter и того самого каркаса, что наши французские кодописатели написали.

Сама модель меня просто поразила, кроме шуток. Это было грандиознейшее создание, которое очень близко к сути отражало весь процесс разведки и разработки на нефть и газ. Если в институте мне казалось, что половина курсов, что читали, нам никогда в жизни не понадобиться, тот тут я сильно пожалела, что не училась еще параллельно на разработке (моя специальность - разведка).

Был создан офигенный браузер по этой модели, по обоим логической и физической частям. До entity можно было добраться буквально из картинки представляющей тот или иной этап рабочего цикла нефтяной компании.
C entity одним кликом можно было перейти на детально описанную физическую таблицу, все нужные словари и проч. Правда в той модели (более 200 таблиц) все логические entity почти до единого аттрибута соответствовали физическим таблицам. Но видно для тогдашнего уровня технологий это было вполне нормально.
Модель точно была максимально возможно универсальна , потому что мы за месяц частично загрузили в нее Лукойловские данные и несмотря на несоответствие стандартов и форматов, все в конечном итоге ложилось в нее ровно и последовательно.

Спросите меня что с этим проектом сейчас? Почил в бозе. Якобы потому, что конкретный переход компаний на эту модель был очень costly, соответственно то что на ее основе написали, не продавалось и все потихоньку сошло на нет. То есть POSC есть и даже модель по-прежнему поддерживает, но они тише воды, ниже травы. Какие уж тут стандарты для всей отрасли. Особенно мне интересно про Алжир, где ихняя государственная нефтяная компания закупила наш продукт и устроила грандиозный проект по перегонке всех алжирских данных за многие годы в Epicenter.

Мораль такова - не доросли мы еще до уровня абстракции, когда все вокруг можно будет представить как entitites. В смысле умом дорасли, а вот материально не тянем :mrgreen:

Сабина
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Sabina
Вот почему Вы во Франции поработали
Кстати с очередной аватарой Вас :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

PS
А с нефтяной компаией я думаю дело было вовсе не в структуре таблиц
Просто об откатах не договорились :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Strannik223 wrote:
JustMax wrote:Вы делаете успехи. Абсолютно серьезно. :)
На самом деле для меня, как для "старого" базовика :oops:, дизайн базы данных всегда первичен, а потом уже идут всякие beans, ado.net и всякие другие приблуды - и именно они IMHO должны подстраиваться под базу а не наоборот. Когда делается наоборот в 80% случаев проект через некоторое время имеет бледный вид.


И причина этому на мой взгляд такова что именно база обычно является узким местом в смысле производительности.
Поэтому дизайн делается не так как удобнее програмить а так как быстрее будет работать


Не только - просто на уровне базы данных намного проще/удобнее контролировать различные business rules и целостность/непротиворечивость данных. Быстрота как раз вторична. Особенно если вы работали в банке где баланс сводится в on-line в любой момент времени из 12 филиалов и 250 удаленных точек обслуживания - а в течение ночи накладываются десятки тысяч транзакций из терминально-банкоматной сети и Eurocard/Visa. И не дай Бог где-то какой-то rule неправильно отработает. :nono#:
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Я кстати интересный фефект наблюдаю
Коллеги, умные люди, пшут в основном на шарпе
Иногда имнадо написаь upgrade script для базы в связи с изменением модели

Ну например, надо заменить какието значения на другие
В духе

update TAB set COL=someexpr WHERE filter

90% это путтак
Организуют цикл по TAB с declare cursor, fetch, проверкой fetch_status
В цикле делают update. Иногда даже filter загоняют в if проверку внутри цикла

Главное что без курсора это не только в стони раз быстрее, но в десятки раз короче по тексту и пишется быстрее
Я заменяю на одну строку, все говорят как круто, и... в следующий раз все равно пишут цикл
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Dmitry67 wrote:Я заменяю на одну строку, все говорят как круто, и... в следующий раз все равно пишут цикл


:D

А update script вы своей волшебной программой генерируете?

Сабина
Last edited by Sabina on 10 Mar 2004 08:33, edited 1 time in total.
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Добавлю свои 2 цента.

Если речь идет о нескольких таблицах то я бы не стал применять Entity Beans вообще. По скольку как правило выбор здесь идет в пользу BMP и даже если вы сделаете view в базе данных и будете использовать EJB QL для CMP я не думаю что это сильно поможeт. Особенно если выборки данных/количество создаваимых бинов большое.
Лучше использовать JDO или TopLink. Возможно это во мне просто говорит противник Entity Beans :)
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

JustMax wrote:Не только - просто на уровне базы данных намного проще/удобнее контролировать различные business rules ...


Вообще то бизнес логике не место в базе данных в случае если эта база используется только J2EE приложением. А в остальном согласен :)
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
OBender
Уже с Приветом
Posts: 1564
Joined: 27 Nov 2001 10:01
Location: Live free or die

Post by OBender »

Sabina wrote:Скажем есть у меня JSP, которая при вызове User Profile формы идет в базу и если там уже есть информация, то она заполняет форму.

Допустим какие-то значения не заданы (nulls).
...
А как в real life appplication это чаще всего делается?


В риал лайф обычно форма сабмитится на контролер-сервлет который проводит валидацию данных и отправляет их в базу если все хорошо или обратно к клиенту с матюками о том что бы он заполнил все как надо.
Еще (если раундтрип на сервер дорогой) то делают валидацию (или ее часть) в джава скрипте прямо у клиента в браузере.
Интересный вы человек! Все у вас в порядке. Удивительно, с таким счастьем - и на свободе. (C) О.Бендер
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

OBender wrote:Вообще то бизнес логике не место в базе данных в случае если эта база используется только J2EE приложением.


Vot, vot kliuchevaja fraza - esli TOL'KO. Vremia ot vremeni 100% baza budet redaktirovatsia vruchnuju. Eto dazhe ne obsuzhdaetsia - eto aksioma, pritom horosho esli eto budet kvalificirovannyj admin, a esli net :х .... Ja predpochitaju perebdet' chem nedobdet'. Dazhe esli mnogie iz biznes rules dublirujutsia na urovne bazy dannyh. Dvojnoj kontrol' esio nikomu ne meshal, i v pervuju ochered' samim zhe razrabotchikam. :D
User avatar
cityzen
Уже с Приветом
Posts: 3759
Joined: 11 Feb 2004 13:37

Post by cityzen »

OBender wrote:
Sabina wrote:Скажем есть у меня JSP, которая при вызове User Profile формы идет в базу и если там уже есть информация, то она заполняет форму.

Допустим какие-то значения не заданы (nulls).
...
А как в real life appplication это чаще всего делается?


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


Т.е Вы против того, что бы иметь бизнес-логику внутри БД., но ничего не имеете против того, чтобы модель данных хранилась на клиенте?
One small step for me ...One giant leap for.. A frog?

Return to “Вопросы и новости IT”