Как обеспечить реляционную алгебру для данной схемы?

СОТРУДНИК (ФИО, УЛИЦА, ГОРОД)

РАБОТЫ (ЛИЦО, ФИРМА, ЗАПЛАТА)

КОМПАНИЯ (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,

Другие вопросы по тегам