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

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

新規登録して質問してみよう
ただいま回答率
85.48%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

6839閲覧

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

jk233

総合スコア55

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

2クリップ

投稿2015/05/08 00:17

編集2015/05/08 00:38

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

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

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

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

案1は冗長な気がしますが、プログラムはすっきりします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

こんにちは。

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

なぜかというと、今後、

  • 締めを行ったユーザーが誰なのかを分かるようにして欲しい。
  • いったん締めたものを差し戻して伝票内容を変更し、再度締めができるようにして欲しい。
  • その際にも差し戻し処理や、再度の締めをしたユーザーとその日時も分かるようにして欲しい。

といった要望が業務側から出てきそうですし、逆に要望が出てこない
のなら、これらを提案することが可能だからです。

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

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

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

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

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

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

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

投稿2015/05/08 00:35

編集2015/05/08 05:38
jun68ykt

総合スコア9058

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

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

jk233

2015/05/08 03:49

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

2015/05/08 10:06

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

0

こんにちは。

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

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

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

投稿2015/05/08 00:26

Tak1wa

総合スコア4791

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

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

0

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

投稿2015/05/08 01:29

kantomi

総合スコア295

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

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

jk233

2015/05/08 03:52

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

2015/05/08 04:22

実はハイブリッドです。 仕入の場合、仕入締めテーブルを持ち、仕入テーブルにフラグではなく、締日、または仕入締めテーブルのキー(締め番号)を持ちます。 請求などの締めも同じ。 仕入データからも、いつ締め予定のデータが、いつ締められたか分かるようにしておかないと、大きくなれば後の調査に苦労します。 更に、例えば、個別締め(20締めだけれど、今月は決算なので末でいったん占めて欲しい)などという要望にも対応できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問