会計科目を具体的に書いてみようと思います。というか、私が使ってる会計科目を具体的に書いてみましょう。ただし、あまり公表したくない情報もあるので、一部は伏せます。
会計科目はツリー構造で記録しておくと便利です。一般に、「大科目」「中科目」「小科目」と呼ばれるものの実装形態なんですが、大中小の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でごりごり動かせばいいですよね。