質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2140閲覧

SQLで家計簿を作りたい

cancat

総合スコア313

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/09/06 12:48

こんにちは。
Windows10でC#のアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。

###前提・実現したいこと
|列1|列2|列3|列4|列5|列6|
|--|:--:|--:|
|収入|
|出費|生活費|食費|交際費|交通費|娯楽費|
| |家賃 光熱費|
全員


子ども

それぞれ1月~12月、上半期、下半期、2017年、2018年…

というような表をSQLのテーブルにするとしたら、どのようなテーブルを作ればよいですか?

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586

です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

テーブル設計の際には、横(列)方向に拡張しなくて良いようにして下さい。

例えば、費目が増えたら列追加しないと駄目なテーブルは設計しないように。

でも、「費目を列にした方が見易いじゃないか」というのは当然あります。
そういった場合は、そのように整形して表示するなりした方が、保守は断然楽になります。

年月なんかも列方向に展開するような持ち方はすべきではありませんが、年と1月~12月の列というのは固定なので少しはありだと思います。
※とは言え、集計などがあるようだとそれも面倒なので、お薦めはしませんが。

また、期毎や年毎に同じ構造のテーブルを名称を変えて持つのも後々面倒なので止めておくこと。
そういったものは、列として定義して識別できるようにする。

追記

テーブル設計の際は、そのデータに対して行う処理も合わせて考えてみて下さい。
画面や帳票での登録や表示を、最低でもSQLで行った時に処理しやすいか?というのを考えながら、
行うとそんなに外れた設計にはならないと思います。

それから、テーブルをどのような単位で作成するかについては、「何々をする」という**動詞(形容詞や名詞ではなく)**で括れる単位にすると良いですよ。

追記2

大福帳型をベースにするのが一番拡張性があります。
・家計簿(日付,ユーザー,費目,入金,出金,摘要)
上記に関連する必要なマスタ
・費目(ID,名称)
・ユーザー(ID,名称)
あれば便利
・摘要マスタ(テキスト)
※用途として、入力画面から簡易にボタンでテキストを登録し、利用する場合には単にリストを選択するみたいな。
ざっくりとはこんな感じでしょうか。

投稿2017/09/06 13:24

編集2017/09/07 16:33
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/09/07 01:08

もうすこし具体例をいただければと。 このばあいテーブルは1つ? 2つ?
cancat

2017/09/07 01:18

概念も大事なのですが、具体例で先に進めました。 ありがとうございます。
sazi

2017/09/07 01:39

書いている間に、解決しちゃいましたね。一応追記しておきました。
cancat

2017/09/07 02:05

ありがとうございます。とても参考になります。感謝。
guest

0

ベストアンサー

まず大きく分けて、人物や品目などのマスターテーブル、そして出費など日別で管理する通常のテーブルが必要です。
以下、私が考える必要と思えるテーブルと値の例です。

<マスターテーブル>

・人物マスター

ID名前
0全員
1
2
3子供
4

・品目マスター

ID名称
0生活費
1食費
2交際費
3交通費
4娯楽費
5家賃
6光熱費
7給料
8パート代
9その他

<テーブル>

・入金テーブル

日付人物ID品目ID金額メモ
2017/08/0517250000
2017/09/0717300000
2017/09/102910000臨時収入

・出金テーブル

日付人物ID品目ID金額メモ
2017/08/0521100大根
2017/08/0521150牛乳
2017/08/1025100000
2017/08/150350000帰省
2017/09/0141300猫缶
2017/09/070690000

ざっと考えた感じです。
品目マスターを出費用と入金用で分けるかどうかはお好みで。
メモはあってもなくても良いですが、あるとちょっとしたメモに使えるかと。
あとはこれらのテーブルを集計して、質問にあるような表にまとめればよいでしょう。

投稿2017/09/07 01:10

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/09/07 01:16

なるほど! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問