Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Выборка данных в связанных БД   Найти похожие ветки 

 
urel   (2006-09-18 22:27) [0]

Проблема в следующем: есть база BOOK, которя является MasterSource-м у бызы PEOPLE,  в свою очередь PEOPLE, является MasterSource-м у базы PEOPLE_STATUS. Как отфильтровать данные в BOOK с условием, связанным с полями, находящимися в несколькиз разных базах?
Например: BOOK_NAME="111" and PEOPLE_NAME="222" or PEOPLE_STATUS_NAME="333". Насколько я понял, SQL-запросом можно этого добиться. Если не трудно, можно ли пару строк на базе вышеизложенного примера?
Заранее благодарен.


 
Desdechado ©   (2006-09-18 22:40) [1]

SELECT нужные поля
FROM Book, People, PeopleStatus
WHERE условия связки перечисленных таблиц AND условия ограничения выборок

ЗЫ книжку по SQL почитай


 
urel   (2006-09-18 22:58) [2]

Спасибо. И ещё один впрос.
Необходимо выбрать данные из PEOPLE_STATUS с условием: PEOPLE_STATUS_NAME="333", после выборки по значениям из соседнего поля в PEOPLE_STATUS отфильтровать базу PEOPLE, т.е. связь какбы в обратную сторону. Одним словом: можно ли результат выборки использовать далее в выборке в качестве маски?


 
ЮЮ ©   (2006-09-19 02:52) [3]

SELECT нужные поля
FROM PEOPLE
WHERE
 PEOPLE_NAME IN (
   SELECT PEOPLE_NAME FROM PEOPLE_STATUS WHERE PEOPLE_STATUS_NAME="333"
 )

хотя и [1] вернет практически то же самое, т.к. останутся только записи, у которых PEOPLE_STATUS.PEOPLE_STATUS_NAME="333


 
Anatoly Podgoretsky ©   (2006-09-19 08:49) [4]

ЗЫ книжку по SQL почитай


 
MsGuns ©   (2006-09-19 10:43) [5]

База построена неверно.
Таблица "Статус" не обязательна, ибо вполне может быть представлена "линейным" атрибутом (полем) в "людской" таблице. А если все же быть примерным "нормализатором", то можно использовать "Статус" как справочник. Но никак не "Мастер"-таблицу ибо вполне могут быть люди с неопределенным или неоднозначным статусом.
Таблица "Книги" должна существовать сама по себе, а вовсе не как детал по отношению к "людям". У "людей" же, конечно, должна быть подчиненная таблица, содержащия указатели на записи "Книг", которые на руках.
При таком подходе вполне уместно добавление в базу справочной информации о книгах: раздел, жанр, физ.состояние, история перемещения и т.д.

Излишняя страсть к "лишним" таблицам и межтабличным связкам по типу "Мастер-детал" - следствие "табличного" подхода к проектированию "базовых" приложений и, как правило, приводит к мутной логике и громоздкой реализации приложений, которые еще и страдают ограниченностью интерфейсных возможностей (например, нельзя показывать произвольные подмножеста, сортировать в любом порядке, искать по "непредусмотренным" полям или их комбинациям и т.д.).
Как здесь совершенно здраво советуют,- учите SQL и забудьте про существование компонент XXTable.
Либо кидайте это треклятые "базы" и займитесь чем-нибудь другим - в мире так много интересного ;)


 
Sergey13 ©   (2006-09-19 10:52) [6]

> [5] MsGuns ©   (19.09.06 10:43)

> то можно использовать "Статус" как справочник. Но никак не "Мастер"-таблицу

Справочник по определению является мастер таблицей для всех, кто на него ссылается.

> Таблица "Книги" должна существовать сама по себе, а вовсе
> не как детал по отношению к "людям".

Это если люди - читатели. А если писатели?


 
Desdechado ©   (2006-09-19 10:58) [7]

> Это если люди - читатели. А если писатели?
Они же не чукчи :) Читать-то наверно тоже будут чужое.
Хотя обычно таки разносят во избежание усложнения логики.


 
MsGuns ©   (2006-09-19 11:05) [8]

>Sergey13 ©   (19.09.06 10:52) [6]
>Справочник по определению является мастер таблицей для всех, кто на него ссылается.

Глупости. Не надо путать ссылки и и отношение "мастер-детал", которое тоже содержит ссылки, но они носят обязательный характер.

>Это если люди - читатели. А если писатели?

А если писатели, то это свойство объекта "Книги". Причем у одной книги может быть сколь угодно авторов. Поэтому никакого мастердетального отношения тут быть не может. Я, Серега, писал "библиотечные" приложения и не раз. А ты ?


 
Sergey13 ©   (2006-09-19 11:07) [9]

> [7] Desdechado ©   (19.09.06 10:58)

Лев Толстой вряд ли уже будет абонентом какой либо библиотеки. Я это имел в виду. 8-)


 
Sergey13 ©   (2006-09-19 11:18) [10]

> [8] MsGuns ©   (19.09.06 11:05)
1. Нигде у автора вообще не написано, что это библиотека. Может это вообще сберкнижки. 8-)
2. Я нигде не говорил, что схема данных автора (если это таки библиотека) безусловно хороша. Я просто указал, на некторые несоответствия (вернее на не абсолютную применимость) в твоих высказываниях.
3. Не мог бы ты объяснить принципиальную разницу между "ссылки и отношение "мастер-детал""?
4. Схемы БД строятся примерно одинаково и для библиотеки и для столовой и для чего то еще.


 
MsGuns ©   (2006-09-19 11:31) [11]

>Sergey13 ©   (19.09.06 11:18) [10]
>3. Не мог бы ты объяснить принципиальную разницу между "ссылки и отношение "мастер-детал""?

Навскидку:

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

Одна запись таблицы может иметь ссылки на разные справочники.
Одни детальная запись не может иметь две мастер-записи

Удаление из справочника НЕ ДОЛЖНО приводить к удалению записей таблицы, ссылающихся на нее.
Удаление из Мастер-таблицы ДОЛЖНО приводить к удалению всех подчиненых записей детала

Экзаменовку решил мне устроить ? ;))


 
MsGuns ©   (2006-09-19 11:36) [12]

Ну, и самое главное различе - семантическое:

Справочники служат фактически для экономии места при хранении и, как следствие, повышения скорости поиска при выполнении запросов. Т.е. это скорее не необходимость, а лишь средство.

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

Хотя, конечно, можно спроектировать базу, в которой по сути справочная информация будет "мастерной", вот только делать этого не советую


 
Sergey13 ©   (2006-09-19 11:56) [13]

> [11] MsGuns ©   (19.09.06 11:31)
> Экзаменовку решил мне устроить ? ;))

Как я могу?!!! Просто уточнить хотел твое видение вопроса.

> Удаление из справочника НЕ ДОЛЖНО приводить к удалению записей
> таблицы, ссылающихся на нее.
ИМХО, удаление из справочника вообще должно быть запрещено, если на запись есть ссыки.

> Хотя, конечно, можно спроектировать базу, в которой по сути
> справочная информация будет "мастерной", вот только делать
> этого не советую

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


 
urel   (2006-09-19 18:25) [14]

Вряд ли кто-нибудь из участников спора прочтёт это сообщение, но большое спасибо Sergey13, прежде всего за педагогический подход к вопросу, а так же за широкую перспективу взгляда на задачу, за попытку помочь, а не блеснуть знаниями что и где надо читать. Да, я чайник в этих вопросах, но я сомневаюсь что все родились такими гуру, и уже в роддоме нянечкам втирали разницу между М-Д и справочником.
На самом деле связи баз с библиотекой и писателями абсолютно никакой. Это связанно с домами. В доме может жить несколько человек, Эти люди могут быть пенсионерами, учениками, рабочими, служащими и т.д. Если он ученик, то уч. заведение выбирается из справочника, рабочий - место работы из справочника... Но в доме может быть еще и хозяйство, которое содержит в себе животных (из справочника), так же сады огороды, и т.д., и т.д., и т.д., и т.д. Проект должен быть готов через два дня, и книжку, в принципе, я бы может и успел прочитать, если бы она была :(. Я просто надеялся на помощь, ведь форум для этого создали?


 
Sergey13 ©   (2006-09-20 08:24) [15]

> [14] urel   (19.09.06 18:25)
> Вряд ли кто-нибудь из участников спора прочтёт это сообщение

Зачем так пессимистично. Скоро подойдут. 8-)

Ответ на твой вопрос в общем виде был дан уже в [1] Desdechado ©   (18.09.06 22:40). [3] ЮЮ ©   (19.09.06 02:52) дал еще один вариант. Лично мне 1 нравится больше (IN стараюсь использовать в последнюю очередь, когда по другому никак), и более конкретно он быдет выглядеть примерно так:

SELECT нужные поля
FROM PEOPLE P,PEOPLE_STATUS PS
WHERE P.PEOPLE_NAME=PS.PEOPLE_NAME and PS.PEOPLE_STATUS_NAME="333"



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.062 c
15-1158514450
ArtemESC
2006-09-17 21:34
2006.10.08
Запутался с дискетами...


15-1158236541
Ega23
2006-09-14 16:22
2006.10.08
С Днём рождения! 14 сентября


3-1154770856
_RusLAN
2006-08-05 13:40
2006.10.08
Передача 3-мерного масива строк в ХП. D7. Firebird. IBX.


2-1158303037
Mishenka
2006-09-15 10:50
2006.10.08
Как перевести сантиметры в пикселы?


15-1158529418
Andy BitOff
2006-09-18 01:43
2006.10.08
Недавно (месяц-другой назад) была ветка ...