web-dev-qa-db-ja.com

複式簿記システムのデータベーススキーマ設計?

複式簿記システム用のデータベーススキーマを設計する方法の詳細を説明するウェブサイトへのリンクを知っているか、持っていますか?.

たくさんの記事を見つけましたが、nonは十分に説明的でした。誰かがこれで私を助けることができればそれを感謝します。

48
soden

役立つと思われるリンクを次に示します。

http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html

更新:代替リンク(元のリンクは壊れているようです):

43
Leslie

次のテーブルを作成

  • アカウント
  • トランザクション
  • ラインアイテム
  • 連絡先(顧客、サプライヤ、または従業員)。

物事を単純にするために、account_typeテーブル、contact_typeテーブルなどは省略します。

テーブル間の関係を特定して設定する

  • 連絡先には多くのトランザクションを含めることができますが、各トランザクションに含めることができる連絡先は1つだけです(1対多の関係)
  • アカウントは多くのトランザクションを持つことができ、1つのトランザクションが多くのアカウントに影響を与えることができます。 line_itemは、トランザクションテーブルとアカウントテーブルの間の結合テーブルです(多対多の関係)
  • トランザクションには多くの品目を含めることができますが、各品目は1つのトランザクションに関連付ける必要があります。

次のスキーマがあります(1対多の関係)。

CONTACT ———< TRANSACTION ———< LINE_ITEM >——— ACCOUNT

各テーブルに適切なフィールドを追加

  • 接触
    • contactID
    • addr1
    • addr2
    • シティ
    • 状態
    • 郵便番号
    • 電話
    • ファックス
    • eメール
  • トランザクション
    • transactionID
    • 日付
    • memo1
    • contactID
    • ref
  • ラインアイテム
    • line_itemID
    • transactionID
    • アカウントID
    • メモ2
  • アカウント
    • アカウントID
    • アカウント名
    • 口座の種類

必要なだけ新しいトランザクションを作成

たとえば、データベースに新しいトランザクションを追加するには、トランザクションテーブルに新しいレコードを追加してフィールドに入力し、連絡先名を選択し、日付を入力します。次に、影響を受ける各アカウントの親トランザクションレコードに新しい子レコードを追加します。各トランザクションレコードには、少なくとも2つの子レコードが必要です(複式簿記システム)。チーズを20ドルの現金で購入した場合は、子レコードをトランザクションレコードに追加し、現金アカウントを選択して、金額フィールドに-20.00(マイナス)を記録します。新しい子レコードを追加し、食料品口座を選択し、金額フィールドに20.00(正)を記録します。子レコードの合計はゼロ(つまり、20.00 − 20.00 = 0.00)でなければなりません。

上記のテーブルに保存されたデータに基づいてデータベースにレポートを作成します

データベース内のすべてのレコードを取得するクエリは、トランザクションの広告申込情報の子レコードがアカウントごとにグループ化され、日付、トランザクションIDの順にソートされます。トランザクションline_itemsレコードの金額フィールドと必要な他の計算フィールドの現在の合計を提供する計算フィールドを作成します。借方/貸方形式で金額を表示する場合は、データベースクエリに2つの計算フィールドを作成し、借方と呼ばれるフィールドと貸方と呼ばれるフィールドを作成します。借方計算フィールドに、「line_itemテーブルの金額フィールドの金額が正の場合は金額を表示し、そうでない場合はnull」という式を入力します。貸方計算フィールドに、「明細テーブルの金額フィールドの金額が負の場合は金額を表示し、それ以外の場合はヌル」という式を入力します。

このかなり単純なデータベース設計に基づいて、フィールド、テーブル、およびレポートを継続的に追加して、データベースにさらに複雑さを追加し、自分またはビジネスの財務を追跡できます。

47
bkire

私はそれを突き刺すかもしれないと考えました。コメントをいただければ幸いです–誰からのフィードバックに基づいてデザインを改良します。今はSQL Server(2005)T-SQL構文を使用しますが、他の言語に興味がある人がいたら教えてくださいさらに例を追加します。

複式簿記システム では、基本的な要素は口座と取引です。基本的な「理論」は、 会計方程式 :株式=資産-負債です。

会計方程式の項目と2種類の名目勘定、IncomeおよびExpensesを組み合わせると、アカウントの基本的な組織は、ネストされたアカウントのフォレストであり、(最小)5本のツリーのルートは次のいずれかです:資産、負債、資本、収入、および費用。

[私は一般的に、階層に適したSQL設計を調査しています...後で詳細を更新します。]

興味深い階層設計の1つは、SQLチームの記事 SQLのその他のツリーと階層 に記載されています。

すべての取引は、借方と貸方のバランスの取れた金額で構成されています。取引ごとに、借方金額の合計と貸方金額の合計は正確に等しくなければなりません。すべての借方と貸方は1つのアカウントに関連付けられています。

[続きを読む...]

9
Kenny Evitt