Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.045 c
3-1155100048
ANB
2006-08-09 09:07
2006.10.08
Как достучаться к БД FB, если файл на сетевой диске ?


2-1158521523
Aleksandr
2006-09-17 23:32
2006.10.08
Delphi7 и html


15-1158568278
deftemp
2006-09-18 12:31
2006.10.08
Perevod teksta s angliiskogo na russkiy cherez perevodchik


2-1158053356
p314
2006-09-12 13:29
2006.10.08
AOwner: TComponent


1-1156305794
Kos[UFO]
2006-08-23 08:03
2006.10.08
Инспекторе объектов BDS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский