• ベストアンサー

MS Access 何となく不安なんですが。。

またしても変な質問なんですが、皆さんの意見をお聞きしたいです。 アクセスを弄り始めて一ヶ月半程ですが、色んな壁にぶかりながら何とか自分のやりたい様な形に出来そうな目処がつきました。 。。。が、自分が作ったこのDBで何度か入力テストを行いテスト結果は上手くいってますが、この先レコード数がどんどん増えていった時に、どこかで破綻しないか心配です。 っと言うのも、幾つかのテーブルで主キーが複数ついており、例えば通常ですと見積テーブル中の見積CDフィールド単体(主テーブル)と明細テーブル中の見積CD(リレーションテーブル)にリレーションを設定し(逆に設定しても)一対多となるのは合点が行くのですが、見積テーブル中の見積CDと仮番CDを複数で選択し明細テーブル中の見積CDと仮番CDに関連付けないと一対多にならない(主テーブルになりえるテーブルが限定されてしまっている)と言うのが、どうも無理やりなやり方ではないのか、また無理なやり方な為にレコード数が何百何千と増えた時に、システムの破綻が起こらないか心配です。 各テーブルの中で複数の主キーが重なり合ったこの様な状態ですと主キー、リレーションなどへの理解の浅さが自分でも認められるだけに『上手くはいっているけど本当にこれでいいのか?!』っと言う不安が尽きません。。 色々と難解な文章で長々書いてしまいましたが、とどのつまり、色々なテストを数回行い上手くいくと言う事は、レコード数がいくら多くなっても大丈夫だと自信を持ってもいいのでしょうか? どうせ駄目になるなら今のうちに直しておきたいし、単にDBが駄目になるだけでなく、それまでのデータも駄目になってしまうことを考え、率直なご意見をお聞きしたいです! 変な質問だと思いますが、何卒宜しくお願いします。m(__)m

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

  • ベストアンサー
  • ykkw_2001
  • ベストアンサー率26% (267/1014)
回答No.1

>レコード数がいくら多くなっても大丈夫だと自信を持ってもいいのでしょうか?  多くなるというのは、 >何百何千と増えた時  のことでしょうね。  自分(または自分がそばにいる環境)で使って行くなら、適宜改良して行く事で、利用しつづける事は可能でしょうが、シェアウェアとか業務ソフトなど他人が使用するならテストすべきです。(ここで質問してるってことは後者ではないと思いますが・・・)  自分で利用する範囲なら、「だ~いじょうぶ」です。 テーブル破壊さえなければ、数千レコードくらいは、手修正可能ですよ。  ただし、自営業か何かで帳簿を載せようとしておられるなら、要注意。毎日mdb以外のファイルにエクスポートしてバックアップしましょう。  データベース一般に言える事で、レコード数の限界は、意外と少ないです。一概に「何件でこうなる」とは言えませんが、パソコンでは単純なレコード検索でも数万件で、テストとは違った応答時間、連続使用限界になると見ておいたほうがいいです。パソコンRDBでは、もっと少ない件数で限界が来ると思います。 >主キー、リレーション  の部分は、読み飛ばしてしまいましたが、(スイマセン)何をどうしようが、テーブル破壊だけなければ、少々ヒモ付けできてないレコードが残ろうが、大丈夫。(最後は手修正) (オペミスでマスタ、バックアップをDELETEしたなんてのは、論外です) ちなみに、私は、Accessは、信用していないので、テーブルに主キー、リレーションを設定しません。リレーションは、レコード番号を管理して、実現しています。これが、マスタテーブルを保護する最善の方法だからです。 これなら、プログラミングは手間を食いますが、CPU486,128MB,Win95+NTのファイルサーバーで、20万件程度で稼働しているものもあります。

whitemark
質問者

お礼

早速のご回答、ありがとうございます! 実はその問題の自営業だったりするわけです。。。 今まで手作業でこなしていた事を、すべてパソコンに置き換える事で、いろんな面のコストダウンを図ろうとしています。ありきたりですが。。 エクセルで名簿を作るのがやっとのレベルでありながら、アクセスなんて無謀だなっとは思うのですが、やらねばならぬ状況になってしまったので。。 会社内のことをしっかり固め、安心して外へ打って出たいのですが、どうも心配性な性格な為、一応目処がついたと言えども、何か落ち着かなくて。。 バックアップはしっかりとる為に、先日記憶装置も買っておきました。 やはりバックアップは大切ですよね。肝に銘じていこうと思います! それと、なんだかとても読み辛い文章になってしまったことをお詫びします。またこのような文章であるのにご回答を下さって本当にありがとうございました。大感謝しております! もう少しほかの皆さんのご意見も伺いたいと思うので、締め切らないでこのまま置いておこうと思います。

whitemark
質問者

補足

それと書き忘れてしまいましたが、実務でメインで使うのが社長で、この社長がまた「ダブルクリックって何?」というレベルですので、余計に心配しているわけです。。。 出るのはため息ばかりです。。(汗

その他の回答 (1)

noname#1296
noname#1296
回答No.2

 見積テーブルの「見積CD」だけで主キーになっていて明細テーブルが「見積CD」と「行番号(?)」だけで主キーになっていれば、「見積CD」だけで1対多のリレーションになりませんか?「見積CD」がユニークなら、これでも大丈夫なはずです。  数百~数千程度のデータ件数なら、OSのクラッシュ・ディスククラッシュ・LAN環境(HUBの故障)などAccess以外の要因で壊れることは何度か経験しましたが、Accessの仕様で壊れることはまずないでしょう。またこのくらいの件数だとインデックスなどそれほどシビアにならなくても、パフォーマンスにも大して影響しないかと思われます。  数万件以上になると、パフォーマンスの面からインデックスなど考慮していやる必要がありますし、いつ壊れても大丈夫なように、こまめにバックアップを取る必要があるでしょう。  自分の場合、検索に使用する項目には全てインデックスを作成しています。書籍などには「インデックスを多用すると検索は早くなるがレコードの更新に時間がかかるため十分検討して使用するように」みたいにかかれていますが、バッチ処理が多くない限り、全体的なパフォーマンスはよくなるためです。

whitemark
質問者

お礼

ご回答ありがとうございました! 実は明細テーブルの方には「見積CD」「仮番CD」さらに「行番号」があるのです。 何とか減らしたかったのですが、どうしても3段階の番号振りが必要になるんです。。。 やっぱり主キー、リレーションに対しての理解が浅い為、このような事ですぐに混乱してしまうのだと思います。 まったく応用が利かない自分が本当に情けない。。 やっぱりまた大型書店へ行って、主キー関係のことが詳しく書かれている本を探してみようと思います。 ところでアクセスの使用で壊れることはないとの事、とても安心できました。 他業種の仕事に関わった事がないため、数千という数字だけでも膨大な数に感じてしまい、壊してしまったらもう終わりだと感じておりました。 そういえば皆さん何万レコードと言う数をアクセスで振り回しているんですよね。掲示板とうでよく見かけていたのにうっかりしていました。 おふたかたのご回答を頂いて、自信が持てるまでバックアップはこまめに取り、また本を読んで改善策を見つけながら、壊れたら仕方ないと腹をくくりテスト運用してみようと思いました。 他の質問を見ますと、僕のだけものすごーくレベルが低い内容にも関わらず回答して頂いてありがとうございました。がんばりまっす!

関連するQ&A

  • リレーションシップで一対多となる条件

    今Access2000を使っているのですが、 リレーションを組む際に、一対一と一対多になる違いを教えてください。 リレーションを組みたいのは、 主テーブルの主キー[登録CD]テキスト型 リレーションテーブル [登録CD]テキスト型 このテーブルの主キーはオートナンバーで[NO]としています いつも通りに作ってハズなのですが、 リレーションを組むと自動的に一対一になってしまいます。 リレーションテーブルになるためにフィールド数の制限などがあるのでしょうか? 宜しくお願いします。

  • 2つのaccessテーブルのレコード数を合わせたい

    一つは200レコードあるリンクテーブルです。 このリンクテーブルとあるテーブル(Bテーブル)を合体させたいと思いました。 そのあるテーブルは主キーであるIDとチェックボックスの2つのフィールドだけです。 このB]テーブルの主キーとリンクテーブルの主キーとリレーションでつなげました。 しかし、そのBテーブルはレコードが全く無いのでチェックボックスが出て来ません。 リンクテーブルのレコード数分、手動で作成したらチェックボックスと組み合わさります。 これでは、毎回毎回リンクテーブルのレコード数を数えて同じ分だけBテーブルでレコードを作成しなくてはいけません。 自動で同じだけのレコードを作ることはできますでしょうか? VBAでレコード数を数えて・・・・とかするのでしょうか?

  • Accessのリレーションシップ

    Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • Access2002 参照整合性について

    テーブル間にリレーションシップを設定する場合、リレーションテーブル側に主テーブルにないレコードがあると参照整合性を設定できないにも関わらず、「結合の種類」で「3」(リレーションテーブル側の全レコードと主テーブル側の同じ結合フィールドのレコードだけを含める)を選べるのは何故でしょうか。 参照整合性を設定できた時点で、リレーションテーブル側には主テーブルにないレコードは無いということだと思うのですが・・・。 よくわからなくなってしまいました。 お答え、よろしくお願いいたします。

  • 一対一のテーブル分割(ACCESS2003)

    ACCESS2003にて、フィールド数が上限の255、レコード数がおよそ1万件の商品マスタテーブルを作ったとします。入力必須フィールドは主キーである商品ID、あと商品名ぐらいで、あとは商品によって入力したりしなかったりするフィールドで、テーブルを開くと空欄が非常に多く目立ついわゆるスカスカの状態になっているとします。そこで商品マスタテーブルを数個に分割(商品の価格情報、商品の品質情報等々)し、商品IDを主キーにもたせ一対一の外部結合でつなげて、密度の濃い(?)テーブルを複数作ったほうが、ファイルサイズの縮小やクエリ等のパフォーマンス向上にメリットがあるのでしょうか?(一対一の結合はあまり使用しないのが一般的なようですが、このような場合使用すべきでしょうか?)教えて頂きたくお願いいたします。

  • アクセスについて教えてください。

    アクセス2002 XP使用 Aテーブル ID 氏名 電話番号 住所  などの個人情報入力 Bテーブル ID (リレーションするためのID主キー) 管理ID 購入商品 上記のように今作っているのですが、AテーブルIDとBテーブルは1対多でのリレーションしてます。 フォームで帳票形式で見たとき、 管理NOの数だけレコード表示されるのはいいのですが、 AテーブルID 1に対し、管理IDが111と三件分あるとして、(勿論BテーブルIDには123となってます) AテーブルID1にひとつ、受付NOを追加して、   ID  受付NO  管理ID   1   1    1   1   2    1   1   3    1   2   1    2   2   2    2   3   1    3 見たいに受付NOがIDごとに123。。。と自動入力されル洋にしたいのですがどのようにすればできますか?素人なので説明もうまくできなくわけが変わらないかもしれませんがおしえてください。よろしくお願いします。

  • ACCESSのリレーションが切れてしまいました

    素人で甚だ恐縮ではございますが、社内システムのACCESS2003のデータベースでリレーション定義が無くなってしまい、アプリで削除していないにも拘わらず主たるテーブルのレコードの各項目に"deleted"或いは"#deleted"が入ってしまいました。 リカバリーは、「データベースの最適化/修復」を行い、リレーションを定義していた先のテーブル内のレコードを削除し、再度リレーション定義し再登録にて回復しました。 リレーションが切れる(無くなってしまう)原因がわかりません。 どういったケースで発生しうるかご教示頂ければと存じます。

  • 未定義になるのは主キーじゃないのが原因?

    二つのテーブルを一対多のリレーションシップで繋ぐとき、 一になる方は主キーじゃないと、一対多にならなかったり参照整合性はできないのでしょうか? 主キーではないテーブル1のフィールド(一)と、(多)のテーブル2のフィールドでリレーションを組もうと思ってるのですが、 リレーションシップの種類が未定義になってしまいます。 これは、1になる方のテーブル1が主キーじゃないのが原因なのでしょうか? テーブル1のこのフィールドは、重複することはありませんが、空白も入る為、主キーにできないし、 主キーはほかのフィールドで使っています。

  • Access 一対一リレーションの編集

    こんにちは 現在、Accessと他のソフトとの連携をするために奮闘しています。。。知恵をお貸下さい。 Accessには元々受注テーブルがあります。 主キーID:オートナンバー 受注日:日付型 納期:日付型 図番:テキスト型 数量:数値 単価:数値 とあり、データがすでに存在しています。他のソフトへエクスポートを継続的に行うにあたって 新規にテーブルを作成し、一対一リレーションをしようとしています。 新規テーブルは 主キーID:オートナンバー 取引先コード:テキスト型 担当者コート:テキスト型 区分コード:テキスト型 実出荷日:日付型 エクスポート状況:数値 そして、受注テーブルと新規テーブルのIDを一対一でリレーションしクエリを作成し、エクスポートしようと思っています。 その際、新規テーブルの方はデータが空なのでクエリ結果が得られないと思うのですが。。。 どうやって既存の受注テーブルと一つ一つのレコードを繋げる事が出来ますか❓ 編集方法をどなたか教えて下さい。 素人ですみません。

  • Access フォームで複数テーブルの同時入力

    フィールド項目が多い為に複数のテーブルに分けて 同じフィールド名 [品番] で1対1でリレーションを組んでいます。 フォームの新規レコードで品番を入力の時に 各テーブルの品番に入力するのにはどうしたらいいでしょうか? 後々のことを考えると1つのテーブルにまとめたほうがいのでしょうか? フィールドが300ぐらいあるのでテーブルに分けたほうがわかりやすいので 現在は10テーブルに分けています。 よろしくお願いします。