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

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

ただいまの
回答率

87.77%

締め処理をデータベース上で表現するには

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 4,544

score 58

【業務】
・納品書を元に、日々仕入データを入力している。
・月初に仕入先から請求書が来る。(月末締め)
・仕入データと請求書の金額突合せが完了したら、前月分を(変更できないように)締め処理したい。

以下の案1と2はどちらがよいのでしょうか?
それともケースバイケースでしょうか?

【案1】仕入データのカラムとして締め処理フラグを管理する
仕入日付 商品コード 仕入先コード 数量 単価 締め処理フラグ ・・・

【案2】別テーブル(締め処理テーブル)に持たせる
締め対象年月 仕入先コード ・・・


案1は冗長な気がしますが、プログラムはすっきりします。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+2

こんにちは。

他の状況をもっと知らないと、どっちがいいとは言えないのですが、
自分が同じ選択肢で悩み、多少工数に余裕があるのなら
【案2】
のほうを押す方向で考えると思います。

なぜかというと、今後、
  • 締めを行ったユーザーが誰なのかを分かるようにして欲しい。
  • いったん締めたものを差し戻して伝票内容を変更し、再度締めができるようにして欲しい。
  • その際にも差し戻し処理や、再度の締めをしたユーザーとその日時も分かるようにして欲しい。
といった要望が業務側から出てきそうですし、逆に要望が出てこない
のなら、これらを提案することが可能だからです。

【案1】だと、このように「締め」に様々な属性を持たせるということに
対応するのが大変になりそう(=仕入れテーブルに「締め」の情報がどん
どん増えて巨大なテーブルになる)な予感がするのですが、【案2】だと、
業務システムとして、「締め」あるいは「締めるという業務」を、「仕入れ」
とは別の1つのエンティティ(または、モデル)として扱うことを、
(複数の開発者がいるのでしたら、チームの認識としても、)
はっきりさせることができます。
また、ある「仕入れ」にひもづく「締めの履歴」をリストすることで、
業務の改善が図れるという状況があるならば、迷わず【案2】です。

とはいえ、「締め」機能のリリースまでにどれくらいの工数をもらえるのか
にもよります。【案2】だとテーブル1個増やすので、それに対するモデル
やロジック、必要ならばビューもと、新しくひと揃え書くことになり、
ひと手間かかりそうですからね。

最近は、業務システムもアジャイルを取り入れることが多いと聞きますが、
冒頭に上げたような追加要件が必ず発生するとはいえないという状況ならば、
「気を回しすぎて、アレもコレも盛り込む」というのは、「想定できる機能
を全部は作らない」というアジャイルの方針に反することにもなります。
(※「想定できる機能を全部は作らない」のがアジャイルだというのは、
単なる私見です。すみません。そういう主張をどこかのブログか記事で
読んだだけなのですが、けっこう納得したので。)

と、いろいろ考えるべきファクターがありそうなのですが、私なら
どうするかというと、こうします。

【案1】と【案2】で迷っていて、【案1】だとほぼ瞬殺で終わるけど、
【案2】だとこれだけ時間がかかる。ただここで多少時間かけてでも
【案2】で設計、開発したら、今後「締め」に対する業務からの色々な要望に応えられる。
 色々な要望として想像しているのは・・・の時や・・・の場合、とかとか。

という相談を、業務側の担当者に持ちかけます。そうすると、結果的に【案1】で
やることになったとしても、業務側から、
「◯◯さんはただ作るだけじゃなくていろいろ業務よりのことも考えてくれて頼もしい」
的な評判を得ることができたりするのです。老獪かもしれないですが、業務側からの
そういう評判、業務システムの開発やるときには大事だったりするもので。

思いつくのは、以上です。
参考になれば幸いです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/05/08 12:49

    ありがとうございます。
    案2を採用するメリットが明確になりました。
    業務に相談できるレベルに落としこんでみます。

    キャンセル

  • 2015/05/08 19:06

    こんにちは。ご返信ありがとうございます。うまくいくといいですね!Good luck をお祈りします。

    キャンセル

+2

こんにちは。

締め処理があるということはおそらく締め日があると思います。
仕入入力があるということは仕入れ日(納品日?)があると思います。

締め処理データ(○月○日までは締められたというデータ)を保存し、
過去納品日の仕入れデータを編集する場合は、プログラムで編集処理を開始する前に締め日と仕入れ日を比較して編集可能か不要か判断しては如何でしょうか。

フラグだと二重管理気味になってしまいますし、
締め日で判断すれば締め処理の解除などの機能が必要になった場合も締め処理レコードを削除すれば済みます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

私は、フラグではなく、売上、仕入データに、締日、または、請求書番号を入れるようにしています。
そうすれば、締め直し、締め後日付での入力(やめてほしいけど、顧客がわがままだと、対応せざるを得ないときがあります)などのイレギュラ処理にも対応可能です。
別テーブルだと、そういったイレギュラな処理を、安全に対応することが難しくなります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/05/08 12:52

    ありがとうございます。
    案1を採用する場合はフラグではなく締日を設定しようと思います。

    キャンセル

  • 2015/05/08 13:22

    実はハイブリッドです。
    仕入の場合、仕入締めテーブルを持ち、仕入テーブルにフラグではなく、締日、または仕入締めテーブルのキー(締め番号)を持ちます。
    請求などの締めも同じ。

    仕入データからも、いつ締め予定のデータが、いつ締められたか分かるようにしておかないと、大きくなれば後の調査に苦労します。
    更に、例えば、個別締め(20締めだけれど、今月は決算なので末でいったん占めて欲しい)などという要望にも対応できます。

    キャンセル

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

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

関連した質問

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