Взаимодействие с несколькими элементами подкласса - PullRequest
0 голосов
/ 28 октября 2018

В настоящее время я разрабатываю расширение для базы данных "Bar Beer Drinkers" (которая часто используется для обучения базовым запросам SQL).

В рамках проекта я создал сущности, которые следуют шаблону "ISA", а именно: «Пиво», «Еда» и «Прочие предметы» - все это «подклассы» «Предмета».

Другая вовлеченная сущность - это сущность Барс.

Между слитками и предметами У меня есть сущность отношений, которая называется "Продает".

Схемы для этих таблиц следующие:

Bar[ID(pk), Name, State, Address, Phone, Open, Close]
Beers[Name(pk), Manf]
Food[Name(pk), Manf]
OtherItems[Name(pk), Manf].

В моем нынешнем виде у меня нет таблицы с именем "Items".

Для таблицы Sells схема:

Sells[barID(fk), item(fk), price]

Я надеялся отобразить PK из всех трех таблиц в столбец "item" в продажах. Ака, я мог бы добавить в него название пива, название еды или другое название.

Похоже, что это не работает в MySQLWorkBench, так как не позволяет мне ссылаться на несколько внешних ключей на один и тот же столбец.

Моим потенциальным решением этой проблемы было что-то вроде:

Sells[barID{fk), beerItem(fk), foodItem(fk), otherItem(fk), price]

Однако это приведет к тому, что каждый кортеж будет иметь как минимум два нулевых значения. Это приемлемо? Каков предпочтительный способ включения отношения «ISA» в объект отношения для SQL?

1 Ответ

0 голосов
/ 28 октября 2018

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

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

Проблема заключается в нескольких таблицах для подтипов.Реальный ответ - иметь таблицу «items», которой у вас сейчас нет, и добавить поле «type».

Items {ItemID (pk), ItemName, ItemType}

Таким образом, вы можете использовать ItemID в качестве внешнего ключа, который вы изначально намеревались использовать.Тем не менее, вы выбираете, что делать, это зависит от ваших потребностей / целей и т. Д., Но вы не можете связать несколько таблиц в одном столбце с внешними ключами.При этом возникает проблема неоднозначности, которую БД не может решить.

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