Помогите с реляционной алгеброй

 
0
 
SQL
ava
Асоишница | 29.09.2013, 17:20
Понимаю, что задачи простые. Но не для тех, кто первый раз в данной теме(лаба в универе)
Я пробовала рещить, но не уверена в правильности решения.
структура базы данных:

Поставщики S    
П#    Имя П    Статус    Город
П1    Петров    20    Москва
П2    Синицин    10    Таллинн
П3    Федоров    30    Таллинн
П4    Чаянов    20    Минск
П5    Крюков    30    Киев

            

Детали P    
Д#    Имя Д    Цвет  Размер    Город
Д1    Болт            Красный    12    Москва
Д2    Гайка    Зеленая    17    Минск
Д3    Диск            Черный    17    Вильнюс
Д4    Диск            Черный    14    Москва
Д5    Корпус    Красный    12    Минск
Д6    Крышки    Красный    19    Москва


Проекты J

ПР#    Имя ПР    Город
ПР1    ИПР1    Минск
ПР2    ИПР1    Таллинн
ПР3    ИПР3    Псков
ПР4    ИПР4    Псков
ПР5    ИПР4    Москва
ПР6    ИПР6    Саратов
ПР7    ИПР7    Москва


Кол-во деталей поставляемых одним поставщиком для одного проекта
П#    Д#    ПР#    S
П1    Д1    ПР1    200
П1    Д1    ПР2    700
П2    Д3    ПР1    400
П2    Д2    ПР2    200
П2    Д3    ПР3    200
П2    Д3    ПР4    500
П2    Д3    ПР5    600
П2    Д3    ПР6    400
П2    Д3    ПР7    800
П2    Д5    ПР2    100
П3    Д3    ПР1    200
П3    Д4    ПР2    500
П4    Д6    ПР3    300
П4    Д6    ПР7    300
П5    Д2    ПР2    200
П5    Д2    ПР4    100
П5    Д5    ПР5    500
П5    Д5    ПР7    100
П5    Д6    ПР2    200
П5    Д1    ПР2    100
П5    Д3    ПР4    200
П5    Д4    ПР4    800
П5    Д5    ПР4    400
П5    Д6    ПР4    500
Первичный ключ помечен знаком #.
Структура таблиц:
Поставщики: S ( П#, ИмяП, Статус, Город )
Детали: P ( Д#, ИмяД, Цвет, Размер, Город)
Проекты: J  (ПР#, ИмяПР, Город )
Количество деталей, поставляемых одним поставщиком для одного проекта:
SPJ ( П#, Д#, ПР#, S )

В прикреплённом файле эта же структура, но таблицами.

И вот, собственно, сами задания.


1.    Получить все такие тройки "номера поставщиков-номера деталей-номера проектов", для которых никакие из двух выводимых поставщиков, деталей и проектов не размещены в одном городе.


Вот моё решение:
(SPJ[ПР#, Д#] DIVIDEBY (J[Город, ПР#] DIVIDEBY S[Город])
Если это правильно, то чтобы получить результат, достаточно
(SPJ[ПР#, Д#] DIVIDEBY (J[Город, ПР#] DIVIDEBY S[Город])[Д#]
или надо
((SPJ[ПР#, Д#] DIVIDEBY (J[Город, ПР#] DIVIDEBY S[Город]) JOIN SPJ)[Д#]


По идее должны получить Д2, Д4, Д5


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

Вариант решения №1:
1) Произведем проекцию отношения S по атрибутам П# и Город
S[П#,Город]

2)Произведем проекцию отношения J по атрибутам ПР# и Город
J[ПР#,Город]

3) Произведем проекцию отношения SPJ по атрибутам Д# и ПР#
SPJ[Д#,ПР#]

4)Над полученными ранее отношениями произведем операцию пересечения
(S[П#,Город] INSERSECT J[ПР#,Город])INSERSECT SPJ[Д#,ПР#]

5) Произведем проекцию полученного выше отношения по атрибуту Д#
((S[П#,Город] INSERSECT J[ПР#,Город])INSERSECT SPJ[Д#,ПР#])[Д#]

Вариант №2
(S[П#, Город] MINUS P[Д#, Город]) TIMES (J[ПР#, Город] MINUS S[П#, Город]) TIMES (P[Д#, Город] MINUS J[ПР#, Город])
Получили (П2, П3, П5)х(ПР3, ПР4, ПР6)хД3. Ну и из этого тройки.
Может, я что упустила(пробовала через симметрическую разность, но там из-за объединений бред)
И ещё вопрос, как вывести эти пары вроде того, как в предыдущем задании проекцию делала

3.    Получить все пары номеров поставщиков, скажем, Sx и Sy, такие, что оба эти поставщика поставляют в точности одно и то же множество деталей.

Тут в решении я сомневаюсь больше всего.
(SPJ RENAME S AS S1)[S1] TIMES SPJ WHERE S=S1)[S]

Ну и тоже, как это произведение отобразить



Comments (4)
ava
Zloxa | 30.09.2013, 08:54 #
Цитата (Асоишница @  29.9.2013,  17:20 findReferencedText)
(SPJ[ПР#, Д#] DIVIDEBY (J[Город, ПР#] DIVIDEBY S[Город])

Такую форму записи поймет, скорее всего, лишь весьма узкий круг лиц, среди которых Ваш препод.
ava
Асоишница | 30.09.2013, 10:58 #
Zloxa,  так оно что, правильно?
А как по-другому?
ava
baldina | 30.09.2013, 11:04 #
Асоишница, у вас реляционная БД. для запросов к таким БД обычно используется SQL.
Вы используете алгебру Кодда, с её нотацией мало кто знаком
ava
Асоишница | 30.09.2013, 11:16 #
baldina, в методичке к лабе говорится, что это всё расширенная алгебра Кодда- усовершенствованная. Но факт остаётся фактом- именно в таком виде мне надо сдать
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit