Как обеспечить реляционную алгебру для данной схемы?
СОТРУДНИК (ФИО, УЛИЦА, ГОРОД)
РАБОТЫ (ЛИЦО, ФИРМА, ЗАПЛАТА)
КОМПАНИЯ (COMPANYNAME, CITY)
МЕНЕДЖМЕНТЫ (PERSONNAME, MANAGERNAME)
Найдите в этой базе данных имена всех сотрудников, которые не работают в First Bank Corporation (при условии, что все люди работают только в одной компании, и людям разрешено появляться в базе данных (например, в сотруднике), но не появляться в работах).
Здесь я не понимаю предположительной части. Что это на самом деле означает?
2 ответа
Как отметил @wildplasser: первая часть предположения
при условии, что все люди работают только в одной компании...
заявляет, что между сотрудниками и компаниями существует одно точное отношение. Это будет означать, что запрещено иметь записи данных, в которых сотрудник не связан ни с одной компанией. Вот где начинается вторая часть предположений
... и людям разрешено появляться в базе данных (например, в сотрудниках), но не появляться в работах
Таким образом, это говорит нам о том, что даже можно удерживать сотрудников, не связанных ни с одной компанией.
Для меня сейчас я бы пришел к выводу, что вопрос требует нулевого или одного отношения между компанией и сотрудниками.
TL;DR: Возможно, вы имеете в виду, что вы "не понимаете предположительную часть" запросов. Это нормально, потому что нет необходимости запрашивать предположения.
PS: Как указывалось в других ответах, утверждения кажутся противоречивыми. Они неясны, как и запрос. Я подозреваю, что "все люди работают только в одной компании" означает "люди в works
работать только для одной компании "; в противном случае прямое значение противоречит предположению, что" людям разрешено появляться в [ employee
] но не появляются в works
" (следовательно, безработный). И я подозреваю, что" имена всех сотрудников в этой базе данных "означают" людей в employee
", за" в базе данных (например, в employee
)".
Для запроса вам просто нужно понять, что означает строка, когда она находится, а когда нет в таблице (базовая переменная или результат запроса). Т.е. как узнать значение таблицы, иначе говоря, предикат, оператор заполнения (именованных), где столбцы являются параметрами:
-- employee PERSONNAME lives on STREET in CITY
В технике и математике традиционно используют имя и параметры в качестве сокращения:
-- EMPLOYEE(PERSONNAME,STREET,CITY)
Каждая строка со столбцами таблицы делает утверждение, известное как предложение, предоставляя аргументы для значений столбцов:
(Frank, 1st Avenue, Mytown) proposition from EMPLOYEE predicate:
-- employee Frank lives on 1st Avenue in Mytown
-- EMPLOYEE(Frank, 1st Avenue, Mytown)
Строки, которые составляют истинное предложение, входят в таблицу, а строки, которые этого не делают. Таким образом, каждая существующая строка заявляет свое предложение, а каждая отсутствующая строка - НЕ свое. Таблица содержит строки, которые превращают ее предикат в истинное предложение.
Реляционные операторы разработаны таким образом, чтобы значение / предикат результата представляло собой определенную комбинацию значения / предиката его входных данных:
R -- holds rows where R(...)
S -- holds rows where S(...)
R JOIN S -- holds rows where R(...) AND S(...)
R UNION S -- holds rows where R(...) OR S(...)
R MINUS S -- holds rows where R(...) AND NOT S(...)
R PROJECT columns to keep -- holds rows where FOR SOME columns to drop, R(...)
R RESTRICT condition -- holds rows where R(...) AND condition
(Используя SQL, (к сожалению, неверный и неуклюжий) их гибрид, см. Этот ответ.)
Ваше назначение:
СОТРУДНИК (ФИО, УЛИЦА, ГОРОД)
РАБОТЫ (ЛИЦО, ФИРМА, ЗАПЛАТА)
КОМПАНИЯ (COMPANYNAME, CITY)
МЕНЕДЖМЕНТЫ (PERSONNAME, MANAGERNAME)Найти имена всех сотрудников в этой базе данных, которые не работают в First Bank Corporation
Мы хотим таблицу строк, которые делают некоторый смысл / предикат истинным. Перефразировать, чтобы получить тот, который мы хотим:
-- employee PERSONNAME does not work for FBC
Мы должны сформулировать это значение / предикат в терминах значений / предикатов, которые нам дали: (Я должен догадаться, что это такое, потому что вы их не дали).
-- rough draft with only relevant columns
-- ... [employee PERSONNAME ...]
AND NOT ... [employee PERSONNAME works at COMPANY ... AND COMPANY = FBC]
-- full base predicates but drop/keep columns appropriately
-- FOR SOME STREET & CITY [employee PERSONNAME lives on STREET in CITY]
AND NOT FOR SOME COMPANY & SALARY
[employee PERSONNAME works at COMPANY for $SALARY AND COMPANY = FBC]
-- shorthand
-- FOR SOME STREET & CITY [EMPLOYEE(PERSONNAME, STREET, CITY)]
AND NOT FOR SOME COMPANY & SALARY
[WORKS(PERSONNAME,COMPANYNAME, SALARY) AND COMPANY = FBC]
Для таблицы строк, которые делают это истинным, мы преобразуем логические операторы в реляционные операторы и преобразуем предикаты базовой таблицы в имена:
PROJECT PERSONNAME (EMPLOYEE)
MINUS PROJECT PERSONNAME (RESTRICT COMPANY = FBC (WORKS))
(Ваш вариант реляционной алгебры может иметь разные операторы.)
Ограничения - это ограничения на возможные ситуации применения и соответствующие значения базы данных. Это "предположения", потому что они принимаются за правду. Это бизнес-правила (включая соответствующие процедуры, физические законы, математические истины и их последствия). Как и в случае описаний того, что содержит база или "находит" запрос, их можно перефразировать как значения / предикаты, используя естественный язык о текущей ситуации и / или используя соответствующие выражения отношения о текущих значениях базовой таблицы. (Так как они всегда истинны, значения / предикаты являются утверждениями / предложениями. Поэтому все версии их запросов имеют в качестве значения результата таблицу без столбцов и одной строки. Поэтому им не нужны базовые таблицы.)
Ограничения не нужны для запроса. Они всегда приводят к истинному утверждению, поэтому объединение (ANDing) их с оператором / предложением запроса не влияет на то, какие строки входят и остаются вне баз. (Они накладывают ограничения на выражения запросов в терминах своих базовых базовых таблиц. Кроме того, они позволяют СУБД предотвращать невозможные значения базы данных и помогают пользователям проверять понимание значений / предикатов базовой таблицы.)
Человек, который дал вам это задание, может и не понять этого. Вы можете спросить их: если бы ни одно из этих ограничений не выполнялось, то чем бы отличалось выражение запроса? (Ответ: не будет.)
Значения таблицы / предикаты не были даны. Может быть, утверждения являются попыткой объяснить, что означает "сотрудник" в запросе по отношению к (неотзывным) значениям employee
а также works
,