• ベストアンサー

無理やりでも主キーを設定すべきですか?

登録番号  科目   取引先 001     消耗品  A社 001     交際費  A社 002     売上    B社 ・ ・ ・ というデータをテーブルに投入していて 基準となる登録番号は複数ある場合があります。 この場合主キーを設定できないのでしょうか? エラーになってしまいます。 となるとリレーションシップも組めないのですよね? これはアクセスで管理するにおいてよくないことなのでしょうか? 無理やりでも登録番号を重複しないように工夫すべきでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • riveron77
  • ベストアンサー率48% (180/370)
回答No.2

拝見したところ、会計とか販売管理とかそういったデータのようですね(違ってたりしてw) 取引(や伝票)が別なら、登録番号を重複しないようにするのもいいですが、この場合、枝番のような項目を追加されてもいいのでは。 登録番号 | 枝番 | 科目  | 取引先 ------------------------------------------------ 001    | 1   | 消耗品 | A社 001    | 2   | 交際費 | A社 002    | 1   | 売上  | B社 … で、登録番号と枝番を主キーにする。 取引データであれば、日々データが増えていくことが予想されるので、検索するのも大変そうです。#1さんが仰っているように、検索の高速化を図る意味でも主キーは設定したいところです。

bmgjtu
質問者

お礼

ずばり販売管理です。 やはり主キーはつけたほうがいいですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • arisuger
  • ベストアンサー率0% (0/1)
回答No.1

検索などを高速に実行するためには主キーを設定した方が良いかと思います。 単一フィールドでの一意性が保証できない場合は、2つ以上のフィールドを主キーとして割り当てることができますので「登録番号」+「科目」などにしてはいかがでしょうか。

bmgjtu
質問者

お礼

複数の主キーを設定できるのですか! 調べてみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • ACCESS2000:主キーに半角と全角データを登録する方法は?

    定数.mdbにTBLというテーブルがあります。 このテーブルの主キーのカラムに以下のような半角と全角のデータを登録しようとすると、「インデックス、主キーまたはリレーションシップで指定されている値が重複しています。変更はできませんでした。」というエラーが発生します。これを回避してデータ登録する方法を教えてください。 AAA   ← 半角 AAA  ← 全角 よろしくお願いします。

  • ACCESS2000の主キー重複について

    いつもお世話になっています。 早速ですが、お教えください テーブル名:AMaster フィールド名:B があります。 「B」は主キーになっていまして、ユーザーが任意に数字をいれることになります。 主キーになっていますので基本的には重複しないのですがユーザーの押し間違いなどによって重複してしまった場合 [Microsoft][ODBC Microsoft Access Driver] インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 といったエラーメッセージが出ます。これは出ても構わないのですがツールバーの「戻る」でしか今後の操作ができなくなってしまうので(ユーザーはPC超初心者)何らかの形でエラーメッセージとともに任意のページへ戻れるようにしたいと考えています。 つきましては、「B」フィールドにあるデータとこれから入力される数値が重複していたら・・・という記述をお教えいただきたいと思います。 ASPにて作成していますのでそれに対応した記述ですとありがたいです。 過去のログに似たようなものがありましたがこちらを参照してもボクにはわかりませんでした。 http://okweb.jp/kotaeru.php3?q=357614 ボクも何分初心者なのでわからないことだらけですがよろしくお願いします。

  • 主キーの変更

    次のようなテーブルが存在します。レコードはあくまで参考の値です。主キーについては必ず一意の値になるようにしています。 代理店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さん   |

  • 主キーやオートインクリメントの事教えて!!!

    はじめまして。私は今ショッピングサイトを作ろうとしているものです。 データベース、Mysqlのプロフェッショナルに質問したいことがあります。 今作ろうとしているショッピングサイトでは顧客登録機能を付けようと思っています。顧客の主キーはメールアドレスにしようと思っているのですがいいんでしょうか? もちろん登録するときにメールアドレスが重複していないかのチェックはかけるので重複することはないと思いますがどうなんでしょう? またメールアドレスは顧客変更で変更される場合もあります。ですから主キーが変わるということになります。(変更時にもプログラムで重複チェックをかけるので重複はしないですが) それか別にオートインクリメントなどを主キーにするほうがいいでしょうか? 例 オートインクリメント メールアドレス 名前 住所 etc・・・ これなら主キーは一意にできますが知り合いから聞いた話ではオートインクリメントはあまり主キーなどに使わないほうがいいと聞きました。 皆さんならどんな感じのテーブルを作成しますか?

    • ベストアンサー
    • MySQL
  • マイクロソフト アクセス リレーションシップの扱い方について

    よろしくお願いします。アクセスで作成したテーブル、例えばAとBには共通の番号があります。それぞれは各テーブル内で番号がいくつか重複しています。この番号により、リレーションシップの関連付け(参照整合性は行わず)を行った後、クエリで抽出したところ、ところどころ同じデータが発生して、膨大な量になってしまいます。参照整合性・フィールドの連鎖更新・レコードの連座削除をチェックして再度リレーションシップを作成しましたが、主テーブルで参照されている固有のインデックスが見つからないとのエラーメッセージが出ます。このテーブルA・Bを使用してデータが重複しないようにクエリで抽出する事はできますか。

  • .net 複数の主キーを設定する方法

    VB2005、SQLServer2005環境です。 主キーの設定方法について教えて下さい。 主キーが一つの場合下記のように記述しますが、複数ある場合はどう記述すればよろしいですか? お願いします。 strsql = "SELECT * FROM Aテーブル" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "Aテーブル") Dim dt As New DataTable dt = ds.Tables("Aテーブル") '主キーの設定 dt.PrimaryKey = New DataColumn() {dt.Columns("コード1")}

  • 主キーはオートナンバー型のIDを使った方が良いのか

    主キーはオートナンバー型のIDを使った方が良いのか、 独自の主キーを作った方がいいのか? 今は テーブル1 ------------------- IDフィールド(オートナンバー型) 主キー 1 2 3 ------------------- 伝票番号フィールド A001 A001 A002 ------------------- 部署フィールド 営業部 システム部 営業部 ------------------- 金額フィールド 100 200 300 ------------------- という状態ですが、 新たに主キーフィールドを作り 更新クエリで UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額]; をして、主キーを独自に作った方がいいのか。 アクセスを作るにおいて、どちらの方が良いのでしょうか? テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。 レコードに空きができないデータベースなら、オートナンバー型、 空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?

  • 個人事業主における事業主借は、法人では何になる?

    個人事業主の簿記において、事業主の個人資金を事業に投入した場合、仕訳科目は 事業主借 となります。 これを踏まえて、法人において、社長が社長個人の金を、会社に貸した場合の 仕訳科目は何になりますか?

  • Access 分割したテーブルを一対一で結合。新規レコードが作れなくなりました

    過去に同様の質問が無かったようなので質問します。 Access2002です。 これまで顧客名簿を一つのテーブルで管理していたのですが、フィールド数が増えてきたので、 テーブルを5分割しました。 主テーブルに対し副テーブル4つを、主テーブルのID(主キー、オートナンバー型)と副テーブルそれぞれのID(数値型)で一対一結合しています。 下記のようなイメージです。 テーブルA-テーブルB テーブルA-テーブルC テーブルA-テーブルD テーブルA-テーブルE すると、 新規レコードの登録が出来なくなってしまいました。 全部のテーブルを結合させたクエリを作って、そのクエリを基にフォームを作ったり、 主テーブルのフォームに副テーブルのサブフォームを4つ設置したり、 幾つか方法を試みたのですが、どれも同じエラーメッセージが出ます。 ↓ 「インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。」 非常に基本的な質問なのかも知れませんが、お手上げです。 どなたかご教授くだされば幸いです・・・。

専門家に質問してみよう