web-dev-qa-db-ja.com

ショップデータベースをモデル化する方法

シナリオは次のような店舗のERモデルを描きたいと思います。商品のリストと、販売からどれだけの利益が得られるか、またどのくらいのお金があるかを知りたい顧客に販売する販売者がいます。商品を売るそしてまた彼らは彼らが売ることから稼ぐこれらのお金から毎日いくつかの支出を持っていますそしてほとんど毎週彼らはこれらのお金を銀行に送ります、これが私が描いたモデルです enter image description here しかし、問題は、売上の合計金額をどこに保存すればよいかわからないことです。したがって、支出テーブルに行を挿入すると、合計金額を減らす必要があります。あなたたちがこのシナリオのためのより良いモデルを持っているなら、私と共有してください

2
The Victor

あなたの質問に固有ではありませんが、一般的に売上高を支出表に入れません。テーブルの名前は、テーブルにお金が入ってくるのではなく、出て行くお金に関する情報が含まれていることを示唆しています-それは読者を混乱させ、将来の保守性を妨げるでしょう。 salesという2番目のテーブルを作成し、そこに領収書を入れることをお勧めします。

あなたがオンラインで見つけることができる非常に良い例のデータベース設計があります(私はbookstore database schemaをグーグルで検索しました、そしてあなたに役立つであろうかなりの数のヒットが出てきました)。

さらに、これを真剣に行う場合は、general ledgerシステム、またはdouble entry book-keeping systemとして知られているシステムを調べます。これは、これを少し適切にモデル化するのに役立ちます。私は会計士ではありませんが、ウィキペディアにはまともなリンクがあるようです。

https://en.wikipedia.org/wiki/Double-entry_bookkeeping_system

2
Mr.Brownstone

必要に応じて正規化されたデータベースでは、合計金額を列のどこにも保存しないでください。クエリを通じてその値を取得する必要があります。次の変更をお勧めします。

  • 日付または日時フィールドを支出に追加して、支出がいつ発生したかを追跡します
  • 支出に金額フィールドを追加して、支出額を追跡します
  • Salesテーブルの「Price」フィールドをGoodsテーブルの「Price」フィールドに移動することを検討してください。これは、価格が販売そのものではなく、販売されている商品の所有物であるように思われるためです。

    次に、たとえば、2012年2月16日の総利益を取得したい場合は、次のようなクエリを実行できます。

 SELECT 
(
 SELECT 
 SUM(s.unit * g.price)
 FROM 
商品gJOIN Sales s 
 ON(s.idGood = g.idGoods)
 WHERE 
 date = '2016-02-16' 
)-
(
 SELECT 
 SUM(amount)
 FROM 
 Expenditure 
 WHERE 
 date = '2016-02-16' 
) AS利益
0
Joe Borysko