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

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

ただいまの
回答率

90.62%

  • SQL

    2308questions

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

SQLで家計簿を作りたい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 793

cancat

score 239

こんにちは。 
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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

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

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

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

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

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

追記

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

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

追記2

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/07 10:08

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

    キャンセル

  • 2017/09/07 10:18

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

    キャンセル

  • 2017/09/07 10:39

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

    キャンセル

  • 2017/09/07 11:05

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

    キャンセル

checkベストアンサー

0

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

<マスターテーブル>

・人物マスター

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

・品目マスター

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

<テーブル>

・入金テーブル

日付 人物ID 品目ID 金額 メモ
2017/08/05 1 7 250000
2017/09/07 1 7 300000
2017/09/10 2 9 10000 臨時収入

・出金テーブル

日付 人物ID 品目ID 金額 メモ
2017/08/05 2 1 100 大根
2017/08/05 2 1 150 牛乳
2017/08/10 2 5 100000
2017/08/15 0 3 50000 帰省
2017/09/01 4 1 300 猫缶
2017/09/07 0 6 90000

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/07 10:16

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

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    コンパイル後、「動作を停止しました」

    コンパイルし、プログラムは正常に動くのですが、その後「visualstudioは動作を停止しました」と毎回出てしまいます。さらに「devenv.exeでハンドルされないMicros

  • 解決済

    c# html~情報取得~表示

    私は、プログラミング言語のc#を学び始めた初心者です。 関東でIT関連の仕事をしています。 以前に、少し趣味でJavaを少しかじってましたが、自主的に少しやっていた程度です

  • 解決済

    同じ条件を持つ場合の表を作るときの考え方

    連日の質問失礼いたします。知恵をお貸しいただけると幸いです。 Visual Studio2015で開発しております。 まず、データベース(phpMyAdmin使用)には以下のテ

  • 解決済

    サーバ側でのキャッシュ管理

    いつもお世話になっております。 webシステム開発初心者です。 今私は、4Dというものを使って十人ぐらいが一斉にアクセスできるwebシステムを作っていて その時のフォームデ

  • 解決済

    visual studioでSQLを使う準備について

    visual studio 2017にてSQLを操作したいと思っております。 DatebaseはCSVもしくはエクセルからインポートして作成したいと思っております。 Mic

  • 解決済

    visualstudioでSQLiteのデータソース選択が表示されません。

    visualstudio2017 commnityを使いC#でSQLiteを使用したいと思っている初心者です。 サーバーエクスプローラーから「データ接続」→「接続の追加」→「デ

  • 解決済

    ログ出力のタイミングについて

    ログを出力するタイミングがいまいち分かりません。 try-catchのCatchの時やプログラムの起動時には出力していますが、例えば設定を読み込む際などには出力するのでしょうか?

  • 解決済

    C# Windows10 の Visual Studio Express 無償版

    最近 C#を始めました。 Windows10 の Visual Studio Express 無償版は 何という名前のExpress を インストールすればよいのでしょうか?

同じタグがついた質問を見る

  • SQL

    2308questions

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