Имя поставщика. Реляционные операторы: реляционная алгебра

Жмем "Пуск" затем кликаем по "Панель управления"

Окрываем "Сетевые подключения"

В меню "Сетевые задачи" выбираем "Создание нового подключения"

Оставляем активной кнопку напротив "подключение к интернету". Жмем "Далее"

Выбираем "Установить подключение в ручную" и жмем "Далее"

Выбираем "Через высокоскоростное подключение, запрашивающее имя пользователя и пароль". Жмем "Далее"

В поле "Имя поставщика услуг" пишем что душе угодно. Например psu.

В поле "Имя пользователя" пишем логин (он же login) это то самое имя которое Вам выдали в инетцентре при регистрации и которое записано у Вас в договоре

В поле "Пароль" пишем пароль выданный в инетцентре и который также прописан у Вас в договоре. (Пароль держим в тайне а договор съедаим дабы никто не ходил за наш счет в инет)... И следим за раскладкой клавиатуры в которой вводим пароль

В поле "Подтверждение" снова вводим тотже самый пароль.

ставим галку "Добавить ярлык подключения на рабочий стол" если надо ярлык на рабочем столе которым можно будет запускать соединение и отключаться. Жмем "Далее"

Все, теперь подключение настроено, осталось только подключиться...

В поле "Пользователь" вводим логин. Если там стоит уже нужный логин то его и оставляем.

В поле "Пароль" вводим пароль к инету. При этом следим за раскладкой в которой вбиваем пароль!

Оставляем галку "Сохранять имя пользователя и пароль" если хотим чтобы пароль и логин сохранялись после отключения соединения и их не приходилось вводить повторно. При этом надо выбрать будет ли сохраняться пароль только для той учетной записи под кторой Вы сейчас сидите в windows или для всех учетных записей (в последнем случае любой кто будет за Вашим компьютером сможет выйти в интернет за Ваш счет)

Ну и наконец жмем "Подключение".

Если наше подключение заработало (стало активным), то иконка нашего подключения станет синей.

Чтобы отключиться от интернета: кликаем правой кнопкой мыши по нашему интернет подключению по PPPoE и нажимаем кнопку "отключиться".

(Соответсвенно если надо посмотреть сколько пришло/ушло пакетов по PPPoE соединению выбираем "состояние", а если надо отключить встроенный виндозный брандмауэр или расшарить папки в интернет или сеть ПГУ выбираем "свойства" и капаемся там. Если надо удалить подключение жмакаим "Удалить"

Иконка подключения по PPPoE будет серой если соединение отключено. Для его подключения опятьже кликаем правой кнопкой мыши по подключению и выбираем "Подключить".

1) При включении PPPoE интернет появится только через 2-5 минут.

2) Если Вы все сделали по инструкции а соединение по PPPoE не включается и вылазит какаято ошибка с таймером... то:

а) Ввели неправильно логин или пароль. Попробуйте ввести снова.

б) Соединение блокирует Ваш брандмауэр. Попробуйте отключить и попытаться подключиться. Если подключиться удастся, запустите брандмауэр и настройте его работу с сетью PPPoE.

в) Ваш аккаунт блокирован за распространение вирусов. Проверить блокировку вы можете самостоятельно в биллинге.

{t (1) | ( u ) ( v ) (ПД(u ) ПОСТАВЩИК(v ) t = v [ПФАМ]

u [ПНОМ] = v [ПНОМ]  u [ДНОМ] = "Д2")}

(ПА.ПФАМ) WHERE EXISTS ПДА (ПДА.ПНОМ = ПА.ПНОМ

AND ПДА.ДНОМ = "Д2")

ПРИМЕР 3.3. Получить имена поставщиков, которые поставляют по крайней мере одну красную деталь

{t (1) | ( u ) (ПОСТАВЩИК(u ) t = u [ПФАМ]  ( v ) (ПД(v )

u [ПНОМ] = v [ПНОМ]  ( w ) (ДЕТАЛЬ(w ) 

w [ДНОМ] = v [ДНОМ]  w [ЦВЕТ] = "Красный")))}

(ПА.ПФАМ) WHERE EXISTS ПДА (ПА.ПНОМ = ПДА.ПНОМ

AND EXISTS ДА(ДА.ДНОМ = ПДА.ДНОМ AND

ДА.ЦВЕТ = "Красный))

ПРИМЕР 3.4. Получить имена поставщиков, которые поставляют по крайней мере одну деталь, поставляемую поставщиком П2

{t (1) | ( u ) (ПОСТАВЩИК(u ) t = u [ПФАМ]  ( v ) ( w )

(ПД(v ) ПД(w )  u [ПНОМ] = v [ПНОМ] 

v [ДНОМ] = w [ДНОМ] 

w [ДНОМ] = "П2"))}

(ПА.ПФАМ) WHERE EXISTS ПДА (EXISTS ПДБ

(ПА.ПНОМ = ПДА.ПНОМ AND

ПДА.ДНОМ = ПДБ.ДНОМ AND

ПДБ.ДНОМ = "П2"))

ПРИМЕР 3.5. Получить имена поставщиков, которые поставляют все детали

{t (1) | ( u ) (ПОСТАВЩИК(u ) t = u [ПФАМ]  ( v ) ( w )

(ДЕТАЛЬ(v ) ПД(w )  w [ПНОМ] = u [ПНОМ] 

w [ДНОМ] = v [ДНОМ]))}

или
(ПА.ПФАМ) WHERE FORALL ДА (EXISTS ПДА

(ПДА.ПНОМ = ПА.ПНОМ AND

ПДА.ДНОМ = ДА.ДНОМ))

ПРИМЕР 3.6. Получить имена поставщиков, которые не поставляют деталь Д2

{t (1) | ( u ) ( v ) (ПД(u ) ПОСТАВЩИК(v ) t = v [ПФАМ]

( (u [ПНОМ] = v [ПНОМ]  u [ДНОМ] = "Д2")))}

(ПА.ПФАМ) WHERE NOT EXISTS ПДА

(ПДА.ПНОМ = ПА.ПНОМ AND ПДА.ДНОМ = "Д2")

ПРИМЕР 3.7. Получить номера поставщиков, поставляющих по крайней мере все те детали, которые поставляет поставщик П2

{t (1) | ( u ) ( v ) (ПОСТАВЩИК(u ) ПД(v ) t = u [ПНОМ]

( v ) (v [ПНОМ] = "П2"  ( w ) (ПД(w )

w [ПНОМ] = u [ПНОМ]

w [ДНОМ]= v [ДНОМ])))}

ПА.ПНОМ WHERE FORALL ПДБ (IF ПДБ.ПНОМ = "П2" THEN

EXISTS ПДВ (ПДВ.ПНОМ = ПА.ПНОМ AND

ПДВ.ДНОМ = ПДБ.ДНОМ))

ПРИМЕР 3.8. Получить номера деталей, которые или весят более 16, или поставляются поставщиком П2, или и то и другое.

{t (1) | ( u ) (ДЕТАЛЬ(u ) t = u [ДНОМ]u [ВЕС] > 16 

 ( v ) (ПД(v ) v [ДНОМ] = u [ДНОМ] 

v [ПНОМ] = "П2"))}

ДА.ДНОМ WHERE ДА.ВЕС > 16 OR

EXISTS ПДА (ПДА.ДНОМ = ДА.ДНОМ AND

ПДА.ПНОМ = "П2")


    1. Реляционное исчисление с переменными доменов
Реляционное исчисление, ориентированное на домены (или исчисление доменов), отличается от исчисления кортежей тем, что в нем используются переменные доменов вместо переменных кортежей, т.е. переменные, принимающие свои значения в пределах домена, а не отношения.

Основным формальным отличием исчисления доменов от исчисления кортежей является наличие дополнительного набора предикатов, позволяющих выражать так называемые условия членства . Если R - это n -арное отношение с атрибутами t 1 , t 2 , ..., t n , то условие членства имеет вид

R (pair , pair ,… ),

где каждая пара pair имеет вид t :v , при этом v это либо литерально задаваемая константа, либо имя доменной переменной. Условие членства принимает значение true в том и только в том случае, если в отношении R существует кортеж, содержащий значения указанных атрибутов. Если v – константа, то на атрибут t задается жесткое условие, не зависящее от текущих значений доменных переменных; если же v – имя доменной переменной, то условие членства может принимать разные значения при разных значениях этой переменной. Например, вычисление выражния

ПД (ПНОМ:"П1", ДНОМ:"Д1")

дает значение true , если и только если в отношении ПД существует кортеж со значением ПНОМ, равным П1, и значением ДНОМ, равным Д1. Аналогично, условие членства

ПД (ПНОМ:ПНОМА, ДНОМ:ДНОМА)

принимает значение true,если и только если в отношениии ПД существует кортеж со значением ПНОМ, эквивалентным текущему значению переменной домена ПНОМА (какому бы то ни было), и знаечнием ДНОМ, эквивалентным текущему знаечнию переменной домена ДНОМА (опять же какому бы то ни было).

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

Далее будем считать, что существуют переменные доменов с именами, образуемыми добавлением цифр 1, 2, 3, ... к соответствующим именам доменов. Кроме того предполагается, что в базе данных поставщиков и деталей каждый атрибут имеет такое же имя, как и соответствующий ему домен, за исключением атрибутов ПФАМ и ДНАЗВ, для которых соответстующий домен называется просто ИМЯ.

Например, выражение

(ПНОМ1) WHERE ПОСТАВЩИК (ПНОМ:ПНОМА,

ГОРОД: "Воронеж")

означает подмножество всех номеров поставщиков из города Воронеж.

С использованием традиционного синтаксиса языка предикатов реляционное исчисление с переменными доменов имеет вид:

{x 1 x 2 x k |  (x 1 , x 2 , , x k )},

где формула, обладающая тем свойством, что только ее свободные переменные доменов являются различными переменными x 1 , x 2 , , x k .

Реляционное исчисление доменов является основой большинства языков запросов, основанных на использовании форм. В частности, на этом исчислении базируется известный язык QBE (Query-by-Example), который был первым (и наиболее интересным) языком в семействе языков, основанных на табличных формах.


    1. Примеры
Приведем некоторые рассмотренные выше примеры, но выраженные в терминах исчисления доменов.

Обратитесь к интернет-провайдеру (Bell, Rogers, Wightman), чтобы воспользоваться услугами их сервиса. В то время как вы настраиваете вашу учетную запись по телефону, менеджер по работе с клиентами должен предоставить вам имя пользователя, номер телефона и пароль. Это объясняется тем, что так вы сможете безопасно входить в интернет.

Убедитесь, что ваш компьютер подключен. Присоедините шнуром телефона заднюю панель компьютера с разъемом телефонной розетки, расположенной на стене комнаты, в которой вы находитесь. Включите ваш ПК.

Перейдите к панели управления. После завершения процесса загрузки компьютера вы должны попасть на главную страницу рабочего стола. Вы также увидите различные иконки. Найдите значок под названием «Мой компьютер» (My computer). Войдите в него. После входа вы заметите маленькую квадратную панель в левой части экрана с надписью «Другие места» (Other places). В данной панели представлены 4 ссылки, по которым вы можете кликнуть. Нажмите на ту, что обозначает «Панель управления» (Control panel).

Зайдите в сетевые подключения. Панель управления содержит различные значки. Она позволяет изменять настройки вашего компьютера, такие как: добавление нового программного обеспечения на ПК, изменение иконки мыши, добавление нового пользователя к компьютеру или в данном случае создание/редактирование вашего аккаунта в сети интернет. Находясь в панели управления, найдите значок под названием «Сетевые подключения» (Network connections). Дважды щелкните по нему, чтобы войти.

Создайте новое подключение. В открывшемся экране вы не увидите практически ничего. Посмотрев на верхнюю левую сторону экрана, вы увидите маленькую квадратную панель с наименованием «Сетевые задачи» (Network tasks). В данной панели находится ссылка «Создание нового подключения» (Create a new connection). Нажмите на нее.

Появится небольшое окошко, вы просто нажмите кнопку «Далее» (Next) один раз.

Теперь вы можете кликнуть по одному из 3-х вариантов. Выберите тот, что говорит «Установить подключение вручную» (Set up my connection manually). Нажмите кнопку «Далее» (Next).

Появится еще один список из 3-х вариантов. Выберите опцию «Через обычный модем» (Connect using a dial up modem), после нажмите кнопку «Далее» (Next).

Теперь вам будет предложено ввести имя поставщика услуг интернета. Вы можете назвать соединение, как того пожелаете. (К примеру, ваше имя, фамилия, кличка) Введите выбранное вами имя поставщика услуг и нажмите кнопку «Далее» (Next).

Теперь вас попросят ввести номер телефона (набранный вами номер должен соответствовать числу, которое вы получили от службы поддержки в момент настройки учетной записи при шаге № 1). Укажите номер телефона и нажмите кнопку «Далее» (Next).

SELECT DISTINCT S.SNAME

WHERE NOT EXISTS

WHERE SP.S# = S.S#

AND SP.P# = "Р2") ;

Или альтернативная формулировка:

SELECT DISTINCT S.SNAME FROM S

WHERE S.S# NOT IN

WHERE SP.P# ="P2") ;

8.3.16. Получить имена поставщиков, поставляющих все детали

См. аналогичные примеры в главах 6 и 7.

SELECT DISTINCT S.SNAME

WHERE NOT EXISTS

WHERE NOT EXISTS

WHERE SP.S# = S.S#

AND SP.P# = P.P#)) ;

Язык SQL не включает какой-либо непосредственной поддержки универсального квантора forall; следовательно, запросы типа forall обычно выражаются через отри­цание кванторов существования, как в этом примере.

Стоит отметить, что такие выражения, как только что показанное, хотя на первый взгляд и выглядят несколько устрашающе, легко составляются пользователями, зна­комыми с реляционным исчислением, как отмечалось в . Или с другой стороны, если эти примеры еще кажутся слишком сложными, то существует несколько "обходных" приемов, которые помогут избежать использования негативных кванто­ров. В нашем случае можно, например, записать:

SELECT DISTINCT S.SNAME

WHERE (SELECT COUNT (SP.P#)

WHERE SP.S# = S.S#) = (SELECT COUNT (P.P#)

("имена поставщиков, для которых количество поставляемых деталей равно количе­ству всех деталей"). Однако обратите внимание на следующие обстоятельства.

Во-первых, в последней формулировке предполагается, в отличие от формулировки с выражением not exists, что нет номеров деталей в отношении SP, которые не содер­жатся в отношении Р. Другими словами, эти две формулировки эквивалентны (а вто­рая - верная) только благодаря действию определенного ограничения целостности.

Во-вторых, метод, примененный во второй формулировке (сравнение двух коли­честв), изначально не поддерживался в SQL и был добавлен в стандарт SQL/92. Он все еще не поддерживается во многих продуктах.

Отметим также, что на самом деле предпочтительнее было бы сравнивать две таблицы (см. обсуждение реляционных сравнений в главе 6), и тогда запрос записывался бы так:

SELECT DISTINCT S.SNAME

WHERE (SELECT SP.P#)

WHERE SP.S# = S.S#) = (SELECT P.P#

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