Помощь с табличными отношениями - PullRequest
0 голосов
/ 02 мая 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Ваш "товар" - это позиция заказа.

       "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.

Расширенная цена - это сколько * цена напитка ввремя заказа.Вы сохраняете это значение в своей таблице заказов, так что вы можете изменить цену напитка в таблице DRINKS, не затрагивая причитающуюся сумму вкладки (в случае, если срок действия вкладки превышает день - т.е. клиенты могут запускать ежемесячную или ежеквартальную вкладку).

HowMany может по умолчанию установить 1. Сумма, причитающаяся по позиции напитка, равна (extendedprice - paymentamountapplied).PaymentAmountApplied по умолчанию равно 0 (то есть по умолчанию запускается вкладка).

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

             ORDER
             orderid, orderdatetime, customerid, ordertotal, paymentapplied.

Ваш бармен просто введет общую сумму заказа, рассчитанную за пределами вашей системы, без ссылки на таблицу DRINKS в базе данных - возможно, бармен посмотрит на классную доску настена.

1 голос
/ 02 мая 2011

Вам понадобится таблица CUSTOMERS, таблица DRINKS, таблица ORDERSHEADER, таблица ORDERDETAIL (каждый напиток на вкладке является отдельной позицией). Вы можете / должны иметь отдельную таблицу ПЛАТЕЖЕЙ. И вы бы распределили платежи по позициям ORDERDETAIL (ваша вкладка). "Вкладка" - это набор всех позиций в заказе (ях), к которым не применен платеж.

...