0

私は非常に単純な支払いWebアプリをプログラミングしています。これは、何かをプログラミングする最初の試みです。データベース構造に問題が発生し、正規化する必要があると言われました。

現時点では、次のような構造になっています。

Customers
---------
id, firstName, lastName, country

Items
---------
id, itemName, itemCost

Purchases
----------
customerID, dayCost, serviceCost, numItem1, numItem2, numItem3

Orders
----------
orderId, customerId, amountPaid, date

次のように表示できるクエリを実行できる必要があります。

  • 合計:140
  • 日帰り費用:50
  • サービス費用:70
  • コロナスコスト:20(4)
  • アイテム2コスト:0
  • アイテム3コスト:0
  • 総債務:100

私のアイデアは、たとえば(purchases.numItem1 by item.itemName where id = 1 + Purchases.dayCost + Purchases.serviceCost)-orders.amountPaidを計算することでした。

これは正しくなく、どうあるべきかわかりません。

顧客が注文した各アイテムの量、各アイテムの合計コスト、および未払いの合計コストをクエリで返すことができる必要があります。

このクエリを可能にするための、より適切な正規化されたテーブル構造は何ですか?

Webページのフォームを操作する必要があり、その構造が機能しないため、顧客とアイテムID、数量と金額を含む注文テーブルを単純に作成することはできません。

4

1 に答える 1

0

Customers と Items は必要に応じて拡張できますが、今のところ問題ありません。

daycost と servicecost がアイテムごとの場合、購入を次のように変更できます。

Purchases
----------
orderId, dayCost, serviceCost, itemid, itemsBought

これで、注文のコストを次のように計算できます。

select sum(p.itemsBought * i.itemcost + p.daycost + p.servicecost) as itemsCost
from purchases p
join items i on p.itemid = i.id
where p.orderid = 17

または顧客が支払うべき金額

select sum(p.itemsBought * i.itemcost + p.daycost + p.servicecost)
       - sum(o.amountPaid) as owing
from purchases p
join items i on p.itemid = i.id
join orders o on o.orderid = p.orderid
where o.customerid = 284
于 2012-12-05T07:02:32.853 に答える