Текущий архив: 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.49 MB
Время: 0.046 c