会計科目を具体的に書いてみようと思います。というか、私が使ってる会計科目を具体的に書いてみましょう。ただし、あまり公表したくない情報もあるので、一部は伏せます。
会計科目はツリー構造で記録しておくと便利です。一般に、「大科目」「中科目」「小科目」と呼ばれるものの実装形態なんですが、大中小の3レベルに限ってしまうと、もっと細かくしたい!ってときに実現できなくなるので、深さが自由かつ、子の数も自由に作れるツリー構造がお勧めだと思います。
まずは「資産」科目から
| 現金 | |
| ┗---- | 財布 |
| プリペイドカード | |
| ┗---- | ICOCA |
| ┗---- | トラフィカ京カード |
| 銀行口座 | |
| ┗---- | さくら銀行 |
| ┗---- | 郵貯銀行 |
| 仮払い | |
| ┗---- | 会社経費 |
| ┗---- | 代理払い |
そして、これはデータベース上のテーブルでは、こういう形で記録します。
| ItemID | ItemName | IsCredit | IsProperty | ParentItem |
| 1 | 現金 | False | True | null |
| 2 | 財布 | False | True | 1 |
| 3 | プリペイドカード | False | True | null |
| 4 | ICOCA | False | True | 3 |
| 5 | トラフィカ京カード | False | True | 3 |
| 6 | 銀行口座 | False | True | null |
| 7 | さくら銀行 | False | True | 6 |
| 8 | 郵貯銀行 | False | True | 8 |
| 9 | 仮払い | False | True | null |
| 10 | 会社経費 | False | True | 9 |
| 11 | 代理払い | False | True | 9 |
こんな感じ
次に、「負債」科目
| クレジットカード | |
| ┗---- | とあるカード |
| ┗---- | まどかマギカカード |
| ┗---- | ラブライブカード |
| 借受 | |
| ┗---- | 定期代 |
| ┗---- | 買い物依頼 |
| 奨学金 |
テーブルにすると、
| ItemID | ItemName | IsCredit | IsProperty | ParentItem |
| 12 | クレジットカード | True | True | null |
| 13 | とあるカード | True | True | 12 |
| 14 | まどかマギカカード | True | True | 12 |
| 15 | ラブライブカード | True | True | 12 |
| 16 | 借受 | True | True | null |
| 17 | 定期代 | True | True | 16 |
| 18 | 買い物依頼 | True | True | 16 |
| 19 | 奨学金 | True | True | null |
そろそろメンドクサクなってきたので、費用科目と、収益科目はDBテーブルだけww
費用科目
| ItemID | ItemName | IsCredit | IsProperty | ParentItem |
| 20 | 食費 | False | False | null |
| 21 | 外食 | False | False | 20 |
| 22 | 食材 | False | False | 20 |
| 23 | 弁当 | False | False | 20 |
| 24 | 文化機材費 | False | False | null |
| 25 | 写真機材 | False | False | 24 |
| 26 | AV機材 | False | False | 24 |
| 27 | 計算機 | False | False | 24 |
| 28 | 文化資料費 | False | False | null |
| 29 | エロゲ | False | False | 28 |
| 30 | 映像ソフト | False | False | 28 |
| 31 | 書籍 | False | False | 28 |
| 32 | コミック | False | False | 31 |
| 33 | ラノベ | False | False | 31 |
| 34 | グッズ | False | False | 28 |
| 35 | 同人誌 | False | False | 28 |
| 36 | 文化活動費 | False | False | null |
| 37 | 撮影旅行費 | False | False | 36 |
| 38 | オーディオ会合費 | False | False | 36 |
| 39 | 通信費 | False | False | null |
| 40 | 移動体通信費 | False | False | 39 |
| 41 | WiMAX | False | False | 40 |
| 42 | IIJ-mobile | False | False | 40 |
| 43 | NTT | False | False | 39 |
| 44 | 移動費 | False | False | null |
| 45 | 公共交通費 | False | False | 44 |
| 45 | 自動車関連費 | False | False | 44 |
| 46 | 税金 | False | False |
null |
最後に収益科目
| 47 | 給与 | True | False | null |
| 48 | ポイント還元 | True | False | null |
| 49 | 雑収入 | True | False | null |
書いててつかれた・・・・・w
ここで、前回の取引
| 日付 | 借方科目 | 借方科目 | 金額 | 備考 |
| 2014/12/19 | エロゲ | ラブライブカード | 10844 | 月によりそう乙女の作法2 |
| 2015/1/26 | ラブライブカード | さくら銀行 | 10844 | カード引き落とし |
これをDBテーブルに書き直すと
| ExchangeDate | CreditItemID | DebitItemID | Price | Comment |
| 2014/12/19 | 29 | 15 | 10844 | 月によりそう乙女の作法2 |
| 2015/1/26 | 15 | 7 | 10844 | カード引き落とし |
こうなる。これがそのままDBエンジンに入ってるわけです。
ここまでテーブル構造を書き下せば、あとはSQLでごりごり動かせばいいですよね。
