• ベストアンサー

AS/400のDBについて

現在オフコンで基幹業務管理しております。 得意先のマスタの項目を何項目か追加するよう情報システム部に依頼を出したところ フィールドの桁数の制限を既にオーバーしている為、これ以上追加するわけにはいかない???、との回答であっさり却下されてしまいました。意味が不明な為、よく追求すると、マスタ全体に桁数制限があり、現状その限界まで来ているとの事でした。オフコンの世界は良く分からないのですが、その追加する項目だけ別なテーブルに分けて対応することは不可能なのでしょうか?

  • hikson
  • お礼率41% (139/338)

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

  • ベストアンサー
  • taranko
  • ベストアンサー率21% (516/2403)
回答No.5

#2です。 >プログラムの分だけ変更が必要になるということですか? プログラムの変更をしなくても、物理ファイル又は論理ファイルが 変更されたときはコンパイルという作業を行わないとプログラムが エラーとなり動きません。 >あたらしいテーブルを作成するということですか? オープン系でいうテーブルAS/400では物理ファイルといいますが キーとなる項目(ここでは得意先CD)と追加したい項目だけ別の 物理ファイルを作成し、プログラム内でその項目を見に行くときは 得意先マスタではなく、新しいファイルを見に行くようにすることで 得意先マスタを変更するよりも楽に項目の追加の様なことはできます。 >後のメンテナンスとはどういったことですか? 後でプログラムの変更などがあった場合など、プログラムの仕様を 調べる必要があるときに、意味も無く行き当たりばったりのファイルを 多く使用していると、見づらく、理解するのに時間がかかり、 余計な時間をとられてしまいます。 ※AS/400ではファイルの読み書きのタイミングが結構 難しいためファイル数が多いとそのときの状況をイメージするのに 苦労します。

hikson
質問者

お礼

わかり易くご説明いただきありがとうございます。 よく、理解しました。

その他の回答 (6)

回答No.7

>#6 です。 >#4の方が項目を追加することによって、最も作業工数のかかる部分としてあげられた、既存プログラムへの影響を防ぐことは可能ですか? その増やした項目は、キーを指定して別テーブルから情報を取得するので可能ですが、それでも得意先マスタ登録・更新・削除プログラムは、変更しなければならない(その追加項目のみのサブ画面を配備するのが簡単でしょう)。

hikson
質問者

補足

ご意見ありがとうございました。その追加項目のみサブ画面にすれば影響を軽減できますね。

回答No.6

>その追加する項目だけ別なテーブルに分けて対応することは不可能なのでしょうか? AS/400のデータベースもRDBMS(DB2/400)可能ですよ。良く使用する方法です。あまりテーブルを細かくし過ぎると好ましくない場合もありますが。 >オフコンの世界 X86系RDBMS(MySQL, PostgreSQL, DB2_expressC) 有料RDBMS と方言はありますがSQL文の基本は同じです。 テーブル:物理ファイル(PF) SQL文:論理ファイル(LF)のコンパイルが発生するのが唯一違う処でしょうか・・・・・コード形態もunicodeでは無くEBCDICですね。

hikson
質問者

補足

ご意見ありがとうございます。テーブルを分けることにより #4の方が項目を追加することによって、最も作業工数のかかる部分としてあげられた、既存プログラムへの影響を防ぐことは可能ですか?

回答No.4

なんか微妙に噛み合ってないですね。 項目(フィールド)の追加で既存フィールドの桁数とは無関係と思う。 数字タイプなら32桁、文字タイプなら256桁、とかいけますよ。 ”フィールド長”ではなく”レコード長”との勘違いであれば、あり得なくはない。 DB拡張は作業工数を度外視しても構わないなら大した手順ではないが、費用対効果の検討は必ずついて回るので、技術的な問題だけではすまないとは思いますが。。。 DBの拡張手順は以下の通り 1.得意先マスタの定義ファイルへ項目追加を行う。 2.新得意先マスタで追加された項目を影響の出るプログラムへ修正を入れる 3.旧得意先マスタのバックアップをとる。 4.旧得意先マスタの論理ファイル(LF)を削除する 5.旧得意先マスタの物理ファイル(PF)を削除する 6.新得意先マスタの物理ファイル(PF)を作成する 7.新得意先マスタの論理ファイル(LF)を作成する 8.新得意先マスタへ旧得意先マスタをバックアップから戻す 9.得意先マスタを使っているプログラムを全てコンパイルしなおす まずは、テスト環境などで検証してから、本番環境で実施します。 2~8はユーザーが使わない時間(深夜や休日など)に行います。 これで一番時間がかかるのは項目2の部分で、システム規模にも寄りますが、影響度調査とプログラム修正で結構な時間がかかります。でも本当の目的は、追加した項目を有効利用するためのプログラムの開発でしょうから、DB拡張だけの時間では済みません。 また、別のテーブルを作成との事ですが、管理したり既存プログラムへの修正をする事を考えると、可能な限り1つにまとめるべきです。知識も無い・お金も無い・人もいない・時間も無い、などの無い無い尽くしになった時にだけ行われる最終手段という位置づけた方が良く、情シス以外が提案すべき内容ではない。

hikson
質問者

補足

参考になる、回答ありがとうございます。 おそらくレコード長の勘違いです。オープンシステムとは違い、作業工数の多さが目に見えてよく分かりました。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.3

#1です。 テーブルの種類によっては、細かく正規化していると思いますが、得意先マスタのようなマスタ類は、あまり細かく正規化していないのでしょう。

hikson
質問者

お礼

ご意見ありがとうございます。

  • taranko
  • ベストアンサー率21% (516/2403)
回答No.2

可能か不可能かと問われると可能です。 AS/400のファイルの項目追加・桁数の変更は簡単にできる ものではありません。得意先マスタともなるといろんなところで 使用されているため相当の手間となります。 物理ファイルを変更する場合、それに伴うコンパイルされた論理 ファイルをすべて削除し、物理ファイルを変更・コンパイルした後 論理ファイルのコンパイルをしなおし、これらの物理・論理ファイル が使用されているプログラムをすべてコンパイルしなおすという 作業が必要になります。 これを考えると、新しくファイルをひとつ作成したほうが簡単に やりたいことができるとは思いますが、後のメンテナンスなどを 考えると極力とりたくない方法です。

hikson
質問者

補足

ご意見ありがとうございます。 >いろんなところで使用されているため相当の手間となります。 使用されているプログラムの分だけ変更が必要になるということですか? あたらしいテーブルを作成するということですか?後のメンテナンスとはどういったことですか? 教えてください。 くどくどと聞いてすみませんがご教授お願いします。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

マスターに入れるべき項目を別テーブルで管理するとなると、システムの大幅な見直しが必要になると思われます。 全く不可能というわけではなく、変更のための工数、その後のメンテナンスのために工数も非常に多くなることが予想されます。

hikson
質問者

補足

ご回答ありがとうございます。オープンシステムの場合DBはなるべくシステム設計の柔軟性を考慮してテーブルを細かい単位に正規化すると聞いておりますが、一概には言えないということでしょうか?

関連するQ&A

  • 複数テーブルをひとつのテーブルにしたいのですが

    教えてください。 得意先マスタ・仕入先マスタ・納入先マスタの3種類のテーブルを、ひとつのテーブルとしてまとめたいのですが、ACCESSにて行う場合、どのようにしたらいいでしょうか?各テーブル共、フィールドの桁数は同じなので、まとめられると思うのですが。。。宜しくお願いします。

  • 既存システムのマスターの管理についての疑問

    以前、同じような質問を以下でさせてもらいましたが、少し別な角度からさせていただきたいと思います。 http://okwave.jp/qa2776979.html 現在AS/400で基幹業務システムを社内開発で管理しております。 得意先のマスタの項目を何項目か追加するよう社内の情報システム部に依頼を出したところ マスタテーブルの正規化がされておらず、すでにレコードの桁数の 制限ぎりぎりに達している為、何をやるにもすんなりと受け入れてもら えない状況となっております。また、正規化をするとなると、古いマス タのため、それを利用しているプログラムの修正に膨大な工数がかかっ てしまうためやむをえないとのご意見も多数いただきました。 過去に、ウェブシステム(SQLserver+ASP)で開発は外注で運用してき た事があるのですがこのような事態は経験がありません。プログラムも 結構な本数でしたが、フィールドの追加もすんなり対応してもらいました。 AS/400が使用しているDBはDB2ですが同じRDBには違いありません。 情シスの言い分やご回答いただいたご意見ももっとですが、本当にこん なことでいいのかという苛立ちも正直感じます。 オープンシステムでも、このような硬直的な事態になりうる可能性はあるのでしょうか? 一部2重管理になりますが得意先のマスタ等、情報系のデータに関して はいっその事、AS/400をあきらめてオープンシステムに移行するぐらい 腹をくくったほうが良いような気がしてきているのですが、いかがなものでしょうか?

  • Accessのフォームにテーブルの項目を追加するには

    フォーム作成途中にフィールドリストにないテーブルの項目をフィールドリストに追加するにはどうすればいいのでしょうか? 新たにフィールドリストに追加せずに、テーブル項目は追加するものなのでしょうか?

  • Access2003_ALTER TABLE構文

    Accessのテーブルにフィールドを追加したくSQLで命令文を書いています。 1.[T_テーブル1]というテーブルに[フィールドA]というフィールドを データ型:数値型 フィールドサイズ:単精度浮動小数点型 小数点以下表示桁数:2位まで表示 で追加したいです。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA FLOAT4 これに少数点以下桁数を設定するにはどう書けばよろしいでしょうか? 2.[T_テーブル1]というテーブルに[フィールドB]というフィールドを データ型:数値型 フィールドサイズ:長整数型 で追加しました。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA INT 「説明」の箇所に説明書きも入れたいのですがここでの設定は可能でしょうか? 以上2点につきましてご指導頂きたくよろしくお願い致します。

  • FileMakerで登録ボタンを作りたい

    FileMaker8.5Advancedを使っています。 仮テーブルとマスタテーブルがあり、それぞれ同じフィールド構成です。 フィールドは プライマリキー(シリアル値) 項目1 項目2 項目3 となっています。 入力者の入力間違いや、空のレコードがマスタテーブルに出来てしまうのを防ぐために、入力者に最初仮テーブルに入力させてその後マスタテーブルにルックアップでコピーしたいと思っています。 仮テーブルのレイアウトに各項目への入力フォームと[登録][キャンセル]というボタンを作成してあります。 ここで、仮テーブルからマスタテーブルへ、スクリプトでデータをコピーする方法が分かりません・・・。 ボタンに定義すべきスクリプト、各テーブル・フィールドに設定しなければならない項目を教えてください。 FMは使い始めてまだ日が浅く、用語も良く分かっていません。 どなたかお分かりになる方がいらっしゃいましたら是非よろしくおねがいいたします。

  • Accessの更新クエリについて質問です。

    よろしくお願いします。 集計したクエリを元に更新クエリを実行すると、更新できません。 やりたい作業としては、売上データテーブルのレコード数を得意先ごとにカウントして、得意先マスタテーブルのレコード件数フィールドを更新する作業です。 追加クエリで一度テーブルに追加してから、テーブル同士で更新も考えたんですが、レコード数が多いためにDBのサイズが爆発的に増えて廃案になりました。 何か良い方法があれば教えてください。

  • 参照整合性の規則に違反しています。

     http://okwave.jp/qa/q8426435.htmlの質問に続きですが  恥ずかしながら、まだ解決に至っていません。問題が発生して年を越してしまいました。  サンプル問題Accessファイルは以上のURLからとれますので、興味の有られる方は  どうぞ、参考にされてください。  それで、  以下を追加しました。    T得意先マスター:テーブルのフィールド名は 得意先CD  得意先名 フリガナ  〒  住所1  住所2 TEL  担当者CD  DM  の9フィールドです。   T売上げデータ:テーブルのフィールド名は   NO  売上日  得意先CD  数量  の4フィールドです。    以上宜しくお願いいたします。

  • テーブルの名前のつけかた。

    アクセス初心者です。 テーブルの各フィールドに名前をつけますよね? そのときに、T_ 顧客テーブル⇒顧客マスターとか、       T_ 商品テーブル⇒商品マスターとかがいろんな解説書に載っているのですが、T_ とはテーブルだから、Tがきてるのですか?何か意味があって、T_ が項目の前にきているのでしょうか?よろしくお願いします。

  • AS400にてサブファイルレコードの再定義

    現在RPGをはじめて3ヶ月程度のものです。 全体の流れ: 1.品目マスタを「作成日、注文番号、納期、品目番号」の順番で読み取る。 2.1をサブファイルレコードとして一覧表示する。 3.2の際に選択項目を設け、修正レコードを選択できるようにしてある。 4.選択項目を指定して実行すると修正画面に移動する。 5.修正項目は納期と納品数のみで、それ以外は表示のみを指定。 5.修正して実行すると、品目マスタが修正されて一覧の画面に戻る。 6.戻ってきた後の一覧画面は修正したレコードは修正した内容を表示して、   修正していないレコードはそのままにする。 という流れです。 上司のアドバイスではCHAINを使って、 再度品目マスタをユニークキーで読み取って、 修正した内容のみを読み取ればよいといいますが、 いまいちやり方が分かりません。 ただイメージとしては、 サブファイルを表示する際にS1という件数を表示する為の仮のフィールド?があり、 それをS1SEQNというサブファイル上のレコード件数を表示するフィールドとして使っています。 (Z-ADD S1 S1SEQN という具合です。) で、品目マスタ内のフィールドとしてE1SEQNというのがあります。 ですので、最初に順次アクセスする際に (Z-ADD S1 S1SEQN )の以外にも (Z-ADD S1 E1SEQN )を使って(現在はしていない)、UPDAT 品目マスタを行っておいて、 修正画面から戻ってきてから、S1SEQNと品目マスタ内のE1SEQNを引っ掛ければいけるのかと思っています。 ところがCHAINを使った場合の、このやり方がさっぱり分かりません。 もしかすると私のイメージ自体が間違っている可能性は凄く高いのですが、 どなたかアドバイスの程お願いします。

  • マスタについて

    早速ですみません。 マスタを別々に分けた方がいいのか、それとも各マスタを1つにまとめた方がいいのかで悩んでいます。 ■マスタを別々に分けた場合 ・○×マスタ ・○○マスタ ・××マスタ    ・    ・    ・ ■各マスタを1つにまとめた場合(※テーブルの項目に種別フィールドで判別するようにする。) ・アイテムマスタ どちらがいいと思いますか? 個人的な意見でも何でも構いませんので皆さん、アドバイス下さい。 宜しくお願いします。