データベースのフラグについて

このQ&Aのポイント
  • データベースのフラグについて説明します。コードで格納されているため、見た目では分かりづらいです。イレギュラーケースではマスタ不備やコードブック再構築の業務が発生します。
  • データベースのフラグの持ち方について考えるべきです。効率的な方法はないか検討しましょう。バイトでもできる作業ですが、面倒くさいことで苦労するのは不愉快です。
  • データベースのフラグは、ファイルサイズを節約するためにコードで格納されています。しかし、見た目では分かりづらく、イレギュラーケースでは業務の発生や社内の混乱を招きます。より効率的な方法の検討が必要です。
回答を見る
  • ベストアンサー

データベースのフラグについて

会社でよく見ることがあるDBのデータの格納形式ですが、ファイルサイズを節約しようとするのか、画像通りコードで格納されています。 大したことをしてませんが、ぱっとみ分かりづらいですし、しょうもないことでSEの人に結合してもらわないと誰も分かりません。 でさらに「鈴木朝食4」「山田夕食唐揚定食」みたいなイレギュラーなケースがあると、マスタ不備、コードブック再構築などの業務が発生して社内がごちゃごちゃです。 でさらにさらに簡単な入力画面になると、メインテーブル・サブテーブル・内部コード・マスタメンテなど莫大な業務が発生します。 よその会社でもこんなデータの持ち方をしますか?もっと効率的な方法はありませんか? ほんとにバイトでもできる、大したことしてませんので、くだらないことで毎日苦労するのはほんとに不愉快です。お願いします。

noname#189001
noname#189001

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

>画像通りコードで格納されています。 普通は、コードで格納します。 (「焼肉定食」と「焼き肉定食」、同じものを違う名称で登録されたらデータを使うときに  大変ですから。  ・・・「カルビ焼肉定食」と「ロース焼肉定食」を分ける必要あるのだろうか?とかもあるので、  通常マスタに「焼肉定食」だけ登録して他は指定できないようにしておきます。  また、「焼肉定食」の名称を変えたいとき全データを修正する必要がないようにコードで  格納します。  例えば、「焼肉定食(生野菜付)」を新たに作りたいので今までの「焼肉定食」を  「焼肉定食(サラダなし)」に変えようと思うと、コードで格納しているなら、  マスタを1個変えたらしまいですが、全部文字で持っていると変更が不可能に近い。) まあ、コードの作り方は良くなさそうですね。 昼食におにぎりはでないのだろうか?・・・ そもそも、何を管理したいのか? ということによってテーブルの持ち方は変わってきます。 それが明示されていないのでテーブルの内容について論議しても意味無いのですが、 私なら例えば以下のような持ち方をして、 食事管理マスタの登録画面と食事コードマスタのメンテナンス画面を用意します。 朝昼夕夜区分はマスタにしますがメンテナンスはSEがするということで。 ## ぱっと見るともっとややこしいと思うでしょうね。 食事管理マスタ (普通日付が入ると思うのだが、一応、ないとしておきます。) 名前,朝昼夕夜区分,食事コード,備考 山田,1,11, 山田,2,16, 山田,3,00,唐揚定食 山田,4,17, 佐藤,1,13, 佐藤,2,15, 佐藤,3,14, 佐藤,4,17, ・・・ 食事コード,食事名 00,その他 11,パン 12,蒟蒻畑 13,おにぎり 14,カレー 15,焼肉定食 16,パスタ 17,ソーセージ 18,ヨーグルト 99,(なし) 朝昼夕夜区分,区分名 1.朝 2.昼 3.夕 4.夜 >しょうもないことでSEの人に結合してもらわないと誰も分かりません。 大抵のデータベースにはビューというものがあって、 SQL文というもので、食事管理マスタの食事コードと食事コードマスタの食事名を結合して、 食事管理マスタビューを表示したら、食事コードも食事名もいっしょにでてくるようなものを作れます。 ・・・利用者がいろいろと加工したい場合はこれを用意するのが一般的とは思います。 (ただし、利用者が直接テーブルやビューからデータを取得できる能力・環境がある場合。) ということで、質問の答えとしては、 >こんなデータの持ち方をしますか? ちょっと違うけど、同様。質問者の方には、似たような持ち方にしか見えないでしょう。 >もっと効率的な方法はありませんか? ビューという便利なものが大抵のデータベースにはあるので (データベースに何を使っておられるのか書かれていませんので  別の呼び方になっているかもしれませんが同等の機能はあるはずです) それを利用すれば使う側は効率的になるはずです。 ##### ビューの機能がないデータベースはほとんど生き残っていないはずだけど、 ビューの機能がないデータベースならごめんなさい。 #####

その他の回答 (3)

回答No.4

>ビューの機能がないデータベースならごめんなさい それ、関係ありませんよ。アクセスや、エクセルなら存在しないかもしれませんが、大抵の場合、クライアントツールと言うものが存在し、RDBであるなら、ほとんどがSQLが使えます。つまり[Where句]ですよね。 それにアクセスや、エクセルであれば、VBAなど、外部からAPIでアクセスできる物が存在するので、「ビュー」と同じ効果または操作ができます。まあ、「ビュー」と言っても過言ではないでしょう。 単にサボっているだけだと思いますよ。

回答No.2

まあ、作った方は素人でしょうね。 でなかったら、金をけちったのでしょう。経営者側の問題でしょう。 添付された画像を見る炉、スキマーの図のようですね。今じゃアクセスで素人でも、せんでつなげずぞー^---------- といってやってください。まあ、よくみかける帳票ですけどね。

回答No.1

>大したことをしてませんが、ぱっとみ分かりづらいですし、 >しょうもないことでSEの人に結合してもらわないと誰も分かりません。 通常は、見やすく表示するプログラムを作って提供し、分からない事が無いようにします。 >でさらに「鈴木朝食4」「山田夕食唐揚定食」みたいなイレギュラーなケースがあると、 >マスタ不備、コードブック再構築などの業務が発生して社内がごちゃごちゃです。 マスタはイレギュラーを排除するために作る物ですので、ごちゃごちゃにしないためにはマスタが必要です。 >でさらにさらに簡単な入力画面になると、 >メインテーブル・サブテーブル・内部コード・マスタメンテなど莫大な業務が発生します。 通常は膨大な業務が発生しないようにするために各種マスタを設けます、莫大な業務が発生しているとすれば、システム設計上に不備があります。 >よその会社でもこんなデータの持ち方をしますか?もっと効率的な方法はありませんか? 一般的には日付別に作る料理が異なるはずですので、カレンダー情報も付加され、さらに、複雑なテーブル構造となると思います。

関連するQ&A

  • データベース

    基本情報処理のデータベース技術についてなのですが、 次の問題の解答を教えて下さい。できれば簡単な解説もお願いします。 問1.データベースシステムを導入することによって期待できる効果を2つ選べ。   ア コード設計作業の軽減   イ 重複データの削減   ウ データ転送の高速化   エ プログラムとデータの独立性向上 問2.データベースのデータ構造に関係しない用語はどれか。   ア 表構造   イ ネットワーク   ウ 木構造   エ SQL 問3.次のデータベースに関する記述のうち、正しいのはどれか。   ア プログラムとファイルが密接な関係にあるので,プログラムがつくり易い   イ データに重複が無いので,業務によってデータ内容に矛盾が発生しない   ウ 適用業務ごとに専用のファイルがないので、ファイル管理がしにくい   エ データの扱いが標準化されるために、個別の業務処理がしづらい   

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • マスタテーブル使用時のデータテーブル設計について

    皆様こんにちは、失礼致します。 現在、ASP.NET+SQLServerで業務用帳票アプリの開発を行っています。 DBを使用した開発は初めてで、テーブルの設計手法について 経験者様のご指導を頂きたく、宜しくお願い致します。 まず、マスタテーブルは以下とします。 【顧客マスタテーブル】 ・顧客マスタID ・顧客名 ・顧客名(英語名) 帳票データ入力画面で、顧客マスタ検索ボタンから別画面を起動し、 そこで選択した顧客名を帳票データ入力画面に反映させます。 そして、帳票データ入力画面のデータをデータテーブルへ格納する のですが、その際には顧客名そのものか、マスタIDのどちらを 格納するのが好ましいのでしょうか? 要件としては以下を満たす必要があります。 1.帳票データ入力画面で格納したデータは   別の帳票データ入力画面でも使い回す。 2.帳票印刷時にのみ、顧客名を対応する顧客名(英語名)で   出力する。 3.データテーブルに格納されたデータは後々参照して使い回す。 顧客名で格納しておけば使い回しは楽ですが、2.のケースで 顧客名から顧客名(英語名)をselectした場合に、顧客名は一意でも 顧客名(英語名)が一意ではなかった場合に問題が起きます。 マスタIDで格納しておけば、対応する顧客名(英語名)は検索 できますが、マスタを修正した場合には3.で過去データを 参照する時に修正後のマスタ情報が表示されてしまいます。 結論としましては、両方とも格納しておくのが好ましいのでは、 と考えておりますが、メンテナンス性の観点から、データテーブルの カラム数はできるだけ少なくしたいとも考えております。 周囲に経験者がいなくて困っております。 ご指導頂けますと幸いです。 以上、宜しくお願い致します。

  • 主キーによるフォームのリレーションについて。

    こんにちは、ACCESS2007で業務の予約・カルテシステムを素人ながら頑張っているのですが、 行き詰ってしまいご質問させてください。 当方の業務上複数の種類のカルテが必要なため、まず予約が入ったら【予約入力フォーム】で予約日時、 業務の種類(どのカルテに記録するか)のみをまず以下のテーブルに入力しています。 【T_業務マスター】 |業務ID|予約日時|業務カテゴリー|受付担当スタッフ|||| |1|2009/12/01|業務A|||| |2|2009/12/03|業務B|||| |3|...... 業務カテゴリーはコンボボックスで選択しています。 その後【予約入力フォーム】内に作ったカルテ作成ボタンを押すことによってそれぞれの種別の カルテ入力フォームを開いております。 カルテのデータはそれぞれ 【T_業務Aカルテ】 |業務AカルテID|業務ID|カルテ内容1|カルテ内容2||| |1|1|あああ|bbb||| |2|5|ううう|ccc||| 上記のようなものが業務別にあります。 ↑ここまでのシステムはなんとかできました。 あとあと、すべての予約(すべての業務ごちゃまぜで)日付順などでリストにしたいので、 このように基本【業務マスターテーブル】と詳細【T_業務○カルテ】をわけてデータを保存しております。 予約入力フォームでカルテ作成ボタンを押したときに、詳細を入力するためのカルテフォームを開く際に DoCmd.OpenFormを使いOpenArgsには業務IDを持たせています。詳細なカルテフォームの読み込み時に カルテフォームの中の業務IDの規定値をOpenArgsの業務IDを渡しております。 何とかできたと思ったのですがカルテフォームには【T_業務○カルテ】だけのデータだけではなく、 【T_業務マスター】に格納したいフィールドも配置してあって、そこにデータを入力するとT_業務マスターの データがダブってしまいました。 具体的には、新規予約受付フォームで 業務ID(オートナンバー):10 業務カテゴリー:業務A 予約日時:2009/12/01 ↓業務Aカルテ入力フォームを開く 業務AカルテID(オートナンバー):15 業務ID:10(OpenArgsを規定値) 予約日時: 予約受付スタッフ:AAAA(このデータは【T_業務マスター】に格納) カルテ内容1: カルテ内容2: ・ ・ ・ この予約受付スタッフをデータ入力すると【T_業務マスター】に業務ID11というデータが新しくできてしまい、 データが2つのIDに分かれてしまいます。原因が分からずで行き詰っております。 文章力がなく、上記文章では上手く伝わらないかもしれませんがお願いいたします。

  • データの整合性について

    お世話になります。 皆さんからアドバイスをいただきたく投稿しました。 下記のような各マスタがあります。 店舗マスタ ・店舗コード ・店舗名 ・ジャンルコード ・削除フラグ ・登録日 ・登録者 ・更新日 ・更新者 ジャンルマスタ ・ジャンルコード ・ジャンル名 ・削除フラグ ・登録日 ・登録者 ・更新日 ・更新者 皆さんに聞きたい事はレコードデータに登録されているマスタデータの整合性についてです。 例えばジャンルマスタの下記のレコードが登録されているとします。 ・ジャンルコード:1000 ・ジャンル名:書籍 次に店舗マスタの下記のレコードが登録されているとします。 ・店舗コード:0001 ・店舗名:あいうえお書店 ・ジャンルコード:1000 ジャンルマスタからジャンルコードが「1000」のレコードを削除された場合に店舗マスタに登録されているジャンルコードが無くなってしまいます。このような事が起きないようにするにはどのような事をするのが正しいのでしょうか。 現在、私が考えているのは既に登録されているジャンルマスタの更新はジャンルコード以外は更新できるようにします。またジャンルマスタのデータの削除については既に店舗マスタに登録されている場合は削除できないようにする事を考えています。このような処理しか思いつきませんでした。 説明が下手ですみませんが理解していただけましたでしょうか。 どうが、皆さんのお知恵をお貸し下さい。またアドバイスをいただけませんでしょうか。 本当に申し訳ありませんが宜しくお願いします。

    • 締切済み
    • PHP
  • エクセル人事データの行の削除・抽出

    莫大な人事データがあります。A列には部門コード10桁 B列には部署名1 C列には部署名2 D列には名前・・・基本給・手当・住所・連絡先等々列だけでも100はあります。行は個人別に並んでおり、名前は重複しませんが、部門コードは重複します。 10005500 財務 10005550 人事 10006000 総務 といった形でデータマスターは完成させました。部署も300ほどあるので、オートフィルタで行を抽出することは困難に近いです。チェックボックスをクリックしまくるのは億劫とミスの元です。 さて、そんなデータがあるなか、シート2に部門コード表を作成し、シート1のマスターのうち部門コードに該当する列だけを抽出したいのです。 難なく使える機能はLOOKUP関数、条件付き書式、フィルタ、条件書式などです。 大量の複数条件を指定して、マスターをいじることはできますか。 よろしくお願いいたします。

  • アクセスのクエリ・リレーションの作り方について

    アクセスは初心者です。 今回顧客の保守、サポートに関するデータベースをアクセスで作ろうと考えています。 ■顧客リスト 会社名、部署名 それぞれ別々のコード番号があります。 ■業務名(訪問内容) 固有のコード番号があります。 ■毎月の訪問データ 担当者名・ID、訪問日、訪問先(会社名・部署名)、業務(訪問内容) 行先(訪問先) 会社名<部署名<業務(訪問内容)で分類し、いつ・どこに・何の業務で・誰が行ったか分かるようにしたいのですが、クエリ、リレーションはどうすればよろしいでしょうか? <例> ●マスターテーブル:(会社名、部署名、業務名(訪問内容)でtree構造になっています。) (フィールド1)(フィールド2)(フィールド3)(フィールド4) 株式会社A  総務課  点検    小泉10/10             修理    小泉10/6             調整              営業部   点検              修理    管10/15              調整    田中10/13        企画部   点検    田中10/6              修理              調整 ●訪問データテーブル: 小泉 10/6 株式会社A総務課・修理、 小泉 10/10 株式会社A総務課・点検 田中 10/6 株式会社A企画部・点検 田中 10/13 株式会社A営業部・調整 管  10/15 株式会社A営業部・修理 マスターテーブル(マスターテーブルを元にしたマスタークエリ)に新たにフィールド4をつくり、そこに訪問データテーブルとリレーションして、担当者・訪問日を入れたいのですが、どのようにしたらよろしいのでしょうか。

  • Access VBA 処理 落ち 不具合

    AccessVBAの処理落ちで困っています。 開発環境は Office 2003 Access OSはWindowsServer2003 Standard Edition(VM Ware上で稼働)、データベースは別に用意したAccess2003MDBファイルです。 処理概要は データベース上の業務データが登録されているテーブル(以後テーブル1と呼ぶ)のデータ(主キー)を元にデータベース上の商品単価が登録されているマスタテーブル(以後マスタ1と呼ぶ)のデータを抽出し、テーブル1に金額をセットするものです。 業務データは月毎に約4000件存在します。 金額のセット処理はレコードセットを用い、テーブル1の該当する月のデータ件数分繰り返し行います。 テーブル1の金額フィールドにテーブル1のデータを主キーとして用い、マスタ1の該当する金額を抽出し、セットしなければならないのですが、金額が正しく登録されている物と全く違う金額が登録されている状態が発生しています。 テストデータは 例:2009年4月分のデータのみ(テーブル1、マスタ1共に) という状態でテストしています。 作成したソースコードをチェックしてみましたがロジック上は 何処にも異常は見当たりません。 ループの中でソースコードの命令外の処理が行われているようにしか思えません。 説明が分かり辛ければ申し訳ありません、ご指摘頂ければ補足します。 どなたかこの現象についてご存じの方はご教授願えませんでしょうか? どうか宜しくお願い致します。

  • VB2005でのエクセルへのデータ出力

    タイトルどおりなのですが、DBからマスタのデータを単純にエクセルに出力するだけなのですが、どういったやり方が一番高速に処理できるのでしょうか? マスタのデータをデータテーブルに取得して、データテーブルをループさせながら、1レコードごとにエクセルに出力するようなやり方しか思いつかないのですが、もっと効率的で高速に処理できる方法があれば教えて下さい。 ちなみに、エクセルは新規ファイルではなく1行目にマスタのテーブルのカラム名を記述している既存ファイルのエクセルに出力していく形になります。 画面の動作としては、マスタメンテの画面にある「出力」ボタンをクリックすることで、ファイルダイアログを表示して保存先を決めたら、出力開始というイメージです。 できれば、サンプルコードなどあれば有難いです。 宜しく、お願いします。 開発環境: OS:WinXP SP2 DB:Oracle 10g(?)、すみません。バージョンまであってるかは不明です。 言語:VB2005Pro Excel:Excel2000

  • SQL文について

    下記の3つのテーブルがあります。 ・社員マスタ(TBL_SHAIN) ・得意先マスタ(TBL_TOKUI) ・地域マスタ(TBL_AREA) 各テーブルのフィールドは下記の通りです。 ・社員マスタ(TBL_SHAIN)  ・社員コード(shain_code)  ・社員名(shain_name)  ・役職タイプ(post_type)  ・地域コード(area_code) ・得意先マスタ(TBL_TOKUI)  ・得意先コード(tokui_code)  ・得意先名(tokui_name)  ・地域コード(area_code) ・地域マスタ(TBL_AREA)  ・地域コード(area_code)  ・地域(area_name)  ・分類コード(kind_type) ※社員マスタ(TBL_SHAIN)の地域コード(area_code)は配列型です。 社員マスタの地域コードには下記のような配列データが格納されています。 ・「{E01,E02,S01,T01,C03}」  ※この値は地域マスタ(TBL_AREA)の地域コード(area_code)です。 試しに 下記のSQLで配列データを下記のような形式に変換。  SELECT chr(39) || array_to_string(area_code, ''',''') || chr(39) FROM TBL_SHAIN;   「'E01','E02','S01','T01','C03'」 上記で出力した値('E01','E02','S01','T01','C03')で得意先マスタを検索できるかと思って下記のSQLを実行。 SELECT * FROM TBL_TOKUI WHERE area_code IN (SELECT chr(39) || array_to_string(area_code, ''',''') || chr(39) FROM TBL_SHAIN); 結果は空でした。 やりたい事は社員マスタ(TBL_SHAIN)の地域コード(area_code)と地域マスタ(TBL_AREA)の地域コード(area_code)を結合し、また得意先マスタ(TBL_TOKUI)の地域コード(area_code)と結合しようと考えています。 みなさんにアドバイスいただきたいのは社員マスタと得意先マスタと地域マスタを結合するにはどのようにしたらいいでしょうか。 また社員マスタの地域コードに該当する得意先を参照するにはどうしたらいいでしょうか。 どうか宜しくお願いします。