• ベストアンサー

主キーの値を自動更新することはできますか

Accessで、あるテーブルの主キーとなる列から、一対多の関係で別のテーブルがあります。 テーブル1 主キー a01  あああ a02  いいい a03  ううう … テーブル2 主キー  b01   a01 かかか b02   a05 ききき b03  a01 くくく … こういうイメージなのですが、あとから「a01」等を、全部「g01」などのように変えて、なおかつテーブル2のデータを更新することはできるでしょうか。

noname#183584
noname#183584

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>あとから「a01」等を、全部「g01」などのように変えて 変化のある項目は主キーに利用するべきではありませんし、変化する値を主キーに設定すること自体がデータベースの設計を理解していない事になります。 よって、データベースの再構築が必要になります。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1164545
noname#183584
質問者

お礼

自動更新はできないのですね。ご教示ありがとうございます。 コード名を見直したかったのですが、それでは一旦参照整合性を削除し、再度新しい列を設けて構築し直すことにします。 ありがとうございました。

関連するQ&A

  • 外部参照してるキーを主キーにすることは可能?

    DB設計について質問なんですが、テーブル1のA列を主キーとし、テーブル2のA列から外部キーでA列を参照したとします。 この時、テーブル2のA列を主キーとして設定することは可能なんでしょうか。 (テーブル2の方で列Aと列Bを組み合わせて主キーにしたいのです。要は二列でデータがユニークになるように設計したい) 使用しているDBはPostgreSQLです。 以上、宜しくお願い致します。

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

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

  •  テーブルA(主キー有り)とテーブルB(主キー有り)をLEFT OUT

     テーブルA(主キー有り)とテーブルB(主キー有り)をLEFT OUTER JOINで外部結合したテーブルが 読み取り専用になっていて、データの更新ができないのですが、更新出来る方法が解らずに、困っていま す。この結合したテーブルのデータを更新できるようにするにはどのようにすればよいのでしょうか、お助け 願います。 SQL SERVER 2008 EXEPRESS EDITION をインストールしたPCからSQL 2000 serverのデータベースに アクセスしています。

  • 主キーの変更

    次のようなテーブルが存在します。レコードはあくまで参考の値です。主キーについては必ず一意の値になるようにしています。 代理店sample1がIDを紛失し、再発行を依頼された場合や,その下の顧客店やこきゃくがIDを紛失し、再発行をする場合に既存のデータをそのまま保持したまま主キーだけを変更して関連された他のテーブルに一斉に反映させるにはどうすればよいでしょうか? ここには記載していませんが顧客店IDやこきゃくIDに関連する別テーブルが10ほど存在します。 主キーが存在するレコードと重複していないかをまずチェックしてそこから基礎となるテーブルに書き換えを行いと考えているのですが、思考がそこで止まってしまっています。 よろしければアドバイスをよろしくお願いいたします。 代理店テーブル |代理店ID(主キー) |代理店名| |        aaaaa | sample1| |        bbbbb | sample2| 顧客店テーブル |代理店ID(主キー) |顧客店ID(主キー)|顧客店名| |        aaaaa |      a-00001| ○○1店| |        aaaaa |      a-00002| ○○2店| |        bbbbb |      b-00001| △△1店| |        bbbbb |      b-00002| △△2店| 顧客テーブル |顧客店ID(主キー) |      こきゃくID(主キー)| こきゃく名| |        a-00001|    a-20071015-00001| Aさん   | |        a-00002|    a-20071015-00002| Bさん   | |         b-00001|     b-20050915-00001| Cさん   | |        b-00002|    b-20050915-00002| Dさん   |

  • accessで複合キーの処理が遅い

    あるマスタデータと明細データがありキーとなる列が2つ(2列)あります マスタデータのテーブルのキー列のA列、B列を主キーとして定義し 明細データのテーブルのキー列のA列は重複ありのインデックス B列も重複ありのインデックスとしてそれぞれ設定しています その2つのキーをクエリで結合して更新する更新クエリを作成しているのですが データ量が多くなってくると非常に反応が遅くなります 同じデータ量で 2つのキー列の値をあるひとつの列に結合した値を格納しその結合列で 更新クエリを作成したところ高速に処理が動作しましたので 複合キーだった場合の処理速度が遅いのだと推測しました (※C列にA列 & B列 の結合した値を格納してC列をキーにするという事です) accessで複合キーの更新クエリを作成する場合、高速に動作させるには なにか工夫が必要なのでしょうか? アドバイス下さい 上記のように複数のキーをひとつの列に結合する工夫で早くはなったのですが・・・ 余分なデータを格納する事になるので非常に容量が大きくなってしまう問題があります

  • XMLで主キーを自動的に入力する方法

    VB.NET2005で家計簿を作っています。 データの保存はXMLで行いたいと考えています。 DataSetにshishutuテーブルとShopテーブルをつくり、shishutuテーブルにはShopテーブルの主キーのデータを格納することで二つのテーブルを連携したいと考えています。 そこでデータ入力時に自動的に主キーを入力したいと思うのですが、Accessのようにオートナンバー型などがないので、一意のデータをどのように入れたらいいか悩んでいます。 Rows.Countでは、データを削除するとデータが重なるなど不具合も出てくるのではないかと思っています。 そこで 1. いつ、どの時点で 2. どのようなプロパティを参照にして 3. 一意のデータを作ればよいか? についてやもしくは「そもそもXMLでは主キーを自動的に入れることは不向きで別に良い方法がある」などのご意見を伺いたいと思います。 なにか良い知恵がありましたらよろしくお願いします。

  • 外部キーだけのテーブル(主キーがない?)

    データベースのテーブルについておたずねします. 主キーがなくて,そのかわりに外部キー(と主キー以外の列)しか持たない テーブルも可能だと聞きました. テーブルには主キーが必ずあるものだと思っていましたが, どのような使いかたをするのでしょうか. どうやら,最初からデータがあるわけではなく, 追加されるタイミングがわからないデータを格納する場合に作っておく, ということらしいのですが,なんのことかよくわかりません. データベース関連書籍をいくつか調べましたが, 主キーのないテーブルの説明などは見当たりません. また,この悩ましい問題を与えてくれた知り合いに訊ねましたが, テーブル構成などの具体的なことは, 企業内のことなので,教えてもらえませんでした. 何か具体的な例を交えながらご説明いただければと思います.

  • 主キーが2つ

    私はアクセス97を仕事に活用したいと思い、勉強している初心者です。そこで質問なのですが、あるアクセスのホームページで参考にしているテーブルに主キーが2つあります。しかし、普通に主キーを設定しようとしても、1つしか設定できません。どうすれば1つのテーブルに2つ主キーを設定することができますか?よろしくお願いします。

  • Access 主キーについて

    Accessでテーブルを作りCSVファイルをテーブルへ読み込みました。その時は主キーを設定しませんでした。1000件あるデータは1000件分読み込めました。 次にテーブルのデータを消して、主キーを2フィールドに設定して、同じように1000件分のデータを読み込んだら950件分しか読み込めませんでした。これは50件は重複するデータがありますよということなのでしょうか?

  • 主キーが文字型での結合

    主キーが文字列型のカラムhoge_idがあります。 (hoge_idは英数字8文字とします) hoge_idで、他のテーブルに結合します。 また、Webからアクセスする必要があり、URLのパラメータで、 ?hoge_id=A1B2C3D4 の様に、主キーを渡す必要もあります。 文字列を主キーにする方法に慣れていないせいか、気持ち悪く感じます。 主キーを別途serial型のカラムidを作成し、 hoge_idには、ユニークキーで設定をし、 結合や、URLのパラメータは主キーのidを使う方法はあまり意味がないでしょうか。 アドバイスを頂けませんでしょうか。 よろしくお願い致します。