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

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

ただいまの
回答率

87.48%

EXCELからのデータベース更新

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 950

score 59

EXCELからのデータベース更新について教えてください。

現在、外部キーを使って構成したマスターデータがあります。
マスターデータは外部キーだけでは意味不明なため、
クエリを使って、外部キーとそれに紐付けされたフィールドデータの両方を
読み込んでいます。

データ1 データ2 データ3 id1 id2 id3

EXCELシートには、データ1~3を表示させて、id1~id3は非表示にしております。

データはコンボボックスで入力しますが、その際は、データ1(id1)、データ2(id2)、データ3(id3)の組み合わせを、DICTIONARYを使って内部に保持しており、
データ1~3を選ぶことで、ID1-ID3を書き換える方法をとっています。

マスターデータの更新時には、ID1-ID3のフィールドのみを書きこんでいます。

このような処理は、外部キーを使ったデータベースアプリとして、
理にかなったものでしょうか?

もっとうまいやり方があるような気がしてなりません。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/09/24 23:54

    その「データベース」の種類は何でしょうか。この質問内容だけでは何も見えてこないのですが・・・。実際のコードや環境情報など、質問者さんが試したことが再現できる情報が必要に思います。

    キャンセル

回答 2

checkベストアンサー

0

理にかなったものでしょうか?

理にかなっている場合もあり、そうでない場合もあり。要件の複雑さ次第です。
私見ではありますが、id列をわざわざ破壊するようなユーザーがいないのであれば十分だと思います。

これはExcelの問題というよりは、DBやアプリの設計、業務の理解にかかる問題です。
今の時点で使えているのであれば一旦満足(妥協)し、今後不満が出てくればその具体的な問題に応じて考える、でも良いのではないかと思います。

問題の例:

  • データとidの組み合わせを変える必要が出てきた。過去のデータをどうする?
  • 既存入力分のデータ表示はしたいが、新規入力はさせたくないidがある
  • 上司のチェックを逃れるため等の理由で、id列を手入力する輩がいる

あまり先回りした実装をすると、後々複雑さの波に呑まれ、手詰まりになりかねないです。
勉強のために、非公開の派生版を作ってみるのは良いと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/09/25 06:34

    アドバイスありがとうございます。
    ID列のセキュリティ面については、まったく現在の思考に及んでおらず
    実使用後にも、いろんな問題が出てきそうなので、新たな視点でも
    考えないといけないかなと思いました。

    今回はEXCELベースなので、DBアプリのUIとしては、ユーザーに触らせるのが前提になっていて、
    どちらかというと、中身がばれたり、壊れてもユーザー責任の部分はあります

    ただ、少々の手荒なコード改造なども想定しているのですが、いかんせん今のDB設計自体と、
    それを取り巻くDB⇔EXCELシート(UI)、EXCELシート⇔VBA内部コードの部分で、
    かなり複雑なコードになってしまい、ゆくゆく自分ですらメンテナンスが大変な気がしています。

    今回の質問内容については、これが他の言語やSQL言語だったら、おそらくDB変数表から、かなり検討しなければならない内容かもしれません。

    ACCESS,EXCELですので、データベース構造とUIを触りながら、
    VBA、シート関数、クエリなどを駆使して、使い心地とすぐに動くものを優先するという
    体制になっています(これがやれてしまうのも、逆な利点でもありますが)

    要件定義など、モデリングなど、必要な手続きをやっていない。これはシステム開発の現場の方から言えば、本当にテストモデルなのかもしれません。

    ただVBAでやれることと、素人への普及を考えた場合には、今回取り入れた方法が、ひとつの開発事例になるかもしれません。その際に、DB設計の段階で、ID列を使わずに直接文字列のほうが、100倍は分かりやすいです。(一方では、データが膨らんでくることや、他言語での大規模リファクタリングを考えた場合は、データの正規化はしておかないと太刀打ちできないとは考えています)

    今回の質問にはなりますが、一般的なデータアプリの場合、開発段階でデータベースの
    フィールドが変更になったりする場合に、コードを変更する際に、どこまで事前に設計できたりするのか、もしくは外部データなどを読み込んで、テーブル生成からシステム的にDB構造を動的に変えたりするのか、そのあたりを知りたいと思っています。(質問が分かりにくくてすみませんでした)

    キャンセル

  • 2018/09/25 11:08

    なるほど。お知りになりたいことは分かりました。
    質問者さんの知りたいことに簡潔に答えるのはとても難しく、質問に回答を返す的なサイトで扱える範疇を超えています。

    皆、過去の経験や試行錯誤、書籍やWebからの情報を通じて「なんとかアンチパターンに陥るのを避ける」ようにしているのが現状だと思います。
    『一般的なデータアプリ』というのは未だ存在しておらず、それぞれの用途と環境での利用に耐えるアプリを個別に設計しているのです。

    キャンセル

0

もっとうまいやり方ってどこに対するどういうイメージでしょうか?

ユーザーには名称で選択させ、プログラムはIDで処理する、
よくある基本パターンだと思います。

ただ、リストの持ち方には幾つかのパターンがあるかもですね。
・リスト用のシートにもっておく
・起動時にDBからリストをもらい、シートにもっておく
・処理毎にDBからリストをもらい、処理する(シートにはもたない)
※シート上のリストは、A列:名称、B列:コード、、D列:名称・・・というイメージです。
※リストには名前の定義をつけて、かつ、動的範囲(OFFSET+COUNTA等)にしておきます。

ケースバイケースですし、
非表示列にシートの保護をかければ、値の編集はできなくすることもできます。
列の定義はEnumを使う事が多いですね。

まだなにか不自由を感じているのであれば、
あなたの設計に改善すべき点が多く残っているのでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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