Помощь со связями таблиц

#database #database-design #ms-access-2007

#База данных #база данных-дизайн #ms-access-2007

Вопрос:

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

 Table Order:        Table Tabs:
------------        ------------
[PK] OrderId    - 1 [PK] TabId
ItemName       /    TabName
QtyOrdered    /     Total
TabId       *-      PaymentType
                    Archive
  

Ее настройка так, что на 1 вкладке может быть много напитков. Это отлично подходит для вкладок, но клиенты могут отказаться от настройки вкладки. Мой вопрос в том, как я могу изменить эти две таблицы для поддержки этого? Или я должен создать новую таблицу?

Заранее спасибо.

Комментарии:

1. Изображение нечитаемо. Либо опишите ваши связи в тексте, либо обрежьте изображение, чтобы оно было разборчивым.

Ответ №1:

Ваш «товар» — это строка заказа.

        "My brother and I will each have a Guiness and his wife would like a gin-and-tonic." 
  

В этом порядке есть три (РЕДАКТИРОВАТЬ: элементы, но два) элемента строки. Чтобы идентифицировать их как части одного и того же порядка [если вам нужно это сделать], вам понадобятся две таблицы:

          the OrderHeader
         (orderheaderid, orderdatetime, customerid) 
  

и

         the OrderDetail 
        (id, orderheaderid, drinkid, howmany, extendedprice, paymentamountapplied).
  

Если вам не нужно идентифицировать напитки как принадлежащие к одному заказу, вы могли бы отказаться от структуры из двух таблиц, но тогда у вас мог бы быть только один вид напитка на заказ.

               ORDER
              orderid, orderdatetime, customerid, drinkid, howmany, extendedprice, paymentapplied.
  

Расширенная цена — это сколько * стоит напиток на момент заказа. Вы сохраняете это значение в своей таблице заказов, чтобы вы могли изменять цену напитка в таблице НАПИТКОВ, не влияя на сумму задолженности по счету (в случае, если срок службы счета превышает день, т. е. клиенты могут запускать ежемесячный или ежеквартальный счет).

Сколько может быть значений по умолчанию равными 1. Сумма, причитающаяся по строке напитков, равна (применяется расширенная цена — paymentamountamount). PaymentAmountApplied по умолчанию равен 0 (т. Е. по умолчанию выполняется вкладка).

Если вам не нужно отслеживать тип заказываемого напитка (т. Е. вы по какой-то причине не хотите использовать свою базу данных, чтобы обнаружить, что по вторникам вечером вы продаете намного больше джина с тоником, чем гинессов):

              ORDER
             orderid, orderdatetime, customerid, ordertotal, paymentapplied.
  

Ваш бармен просто ввел бы общую сумму заказа, рассчитанную вне вашей системы, без ссылки на столик с НАПИТКАМИ в базе данных — возможно, бармен посмотрел бы на классную доску на стене.

Комментарии:

1. Вкладки не должны продлеваться более чем на день, чтобы менялись цены на напитки — можете ли вы сказать «Счастливый час»?

Ответ №2:

Вам нужна таблица КЛИЕНТОВ, таблица НАПИТКОВ, таблица заголовков ЗАКАЗОВ, таблица деталей заказа (каждый напиток на вкладке представляет собой строку). У вас может / должна быть отдельная таблица ПЛАТЕЖЕЙ. И вы бы распределили платежи по позициям детали ЗАКАЗА (ваша вкладка). «Вкладка» — это набор всех позиций заказа (ов), к которым не применена оплата.

Комментарии:

1. У меня есть таблица под названием items, в которой есть идентификатор, имя_элемента, стоимость и кол-во. Я не очень силен в проектировании БД, поэтому не уверен, что вы имеете в виду.