Реляционная алгебра (проверка работоспособности): филиалы, клиентами которых являются все клиенты Tulsa - PullRequest
1 голос
/ 19 января 2020

С учетом этих схем:

Счет: bname, acct_no, баланс
Вкладчик: cname, acct_no
Клиент: имя, улица, город <- (все клиенты / клиенты ссуды и счета) <br> Кредит: номер_счета, сумма, имя_байла
Заемщик : cname, loan_no
Филиал: bname, b_city, assets

Вопрос: Найдите филиалы, в число клиентов которых входят все клиенты, которые живут в Талсе

Мой профессор дал такое решение:

Π cname, bname (account ⋈ Depositor) / Π cname city == 'Tulsa' (клиенты))

Я не думаю, что часть 10 cname, bname (account ⋈ Depositor) верна, потому что ТОЛЬКО включает в себя cname и bname клиентов со счетами и не включает ВСЕХ клиентов (исключает тех, у кого есть кредиты). В вопросе конкретно не сказано: «Найти филиалы, в число клиентов которых со счетами входят все клиенты, которые живут в Талсе».

Чего мне не хватает?

1 Ответ

1 голос
/ 19 января 2020

Мы можем догадаться - по именам, симметрии и вашему упоминанию "клиентов по кредитам и счетам" - что существует правильный запрос, включающий (объединение проекций) (Account join Depositor) & (Loan join Borrower). Таким образом, кажется, что вы принимаете запрос разумно. Но вы не даете предикаты базовой таблицы (критерии, по которым появляются строки); Вы полагаетесь на нас, чтобы угадать.

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

Однако вы, вероятно, оба не правы: если у определенного филиала и Талсы нет клиентов, то результат должен содержать этот филиал. Но частное не будет. Спецификация похожа только на ту, которая соответствует подразделению. Ваше подразделение возвращает «филиалы, клиентами которых являются все клиенты, которые живут в Талсе» и в которых есть хотя бы один клиент. Это случай классических c ошибок и неясностей в спецификации и реализации, связанных с делением и почти с делением. С другой стороны, может быть, есть ограничение, что ни у одного банка нет клиентов. Тогда ваш запрос верен, но не ваш аргумент.

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

...