• 締切済み

DB構成<キーの考え方>

こんにちは。 現在Oracle9iにてとあるシステムのDB構成を考えております。その際のキー項目の考え方で悩んでおります。 私自身AS/400などをずっとやっていましたので、キー項目の考え方が「データが一意になるまで。」という考え方をしていました。 しかし、今回DBを作成したところ「キー項目が多すぎる」と言われ、DBでの処理に負担がかかりすぎるし、SQLで取ってくるからあってもなくてもいいと注意されました。 そこで、「キー項目」についての考え方<効果的なつけ方など>を聞いたのですが、あまり明確な答えが返ってきませんでした。 みなさんはキーを作成する時に、どのようなことに注意されていますか?また、どのようなキーのつけ方をしたら効果的になるのでしょうか? あまりにいきなり頼まれたので(叩きでいいって言ったのに…)、知識も不十分で申し訳ないですが、困っております。

みんなの回答

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

と、聞かれても返答のしようがありませんねぇ。 1レコードのレコード長は?項目数は?レコード件数の見込み件数は?処理スピードは要求されますか? キーとなりうる項目は? 差し支えなければ、なんの処理かをお願いします。とりあえず下記URLでご参考になれば。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sak3sql.htm

aw11
質問者

補足

お返事ありがとうございます。 すみません…差支えがあるんです。 自分でもこんな質問わかりにくいとは、思うんですが。 例えようとしても、ケースや項目も多すぎまして… さらに項目も実際には固まっていないし… そもそもシステム設計すらガンガン毎日変わってしまって… とりあえずサイトや本見て勉強します。 明日までには、何とかできないでしょうけど。 申し訳ないですけど、質問締め切ります。 質問するレベルすら到達していなかったです。 また疑問が出てきたら、質問させていただきます。 すみませんでした。

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

関連するQ&A

  • テーブルのキー項目の選定

    データベースを用いて、音楽情報を管理しようと考えています。 今のところ、列は曲名、歌手、アルバム、作詞、作曲、ジャンルを定義しています。 困った事に、数万と存在する楽曲の中から一意に識別するためキー項目がなかなか思いつきません。 予想で、曲名と歌手をキー項目に設定すれば一意に識別できるのでは?と考えています… 音楽情報をDB化する時に、キー項目に設定すべき項目を教えてください。

    • ベストアンサー
    • MySQL
  • Web画面でのDBのアクセスについて

    Web画面において、ある項目のデータを入力した後で、入力されたコードの存在チェックとしてDB(Oracle)をアクセスとしてSQL文を実行したいのですが、プログラムとして可能でしょうか? PLSQLで作成された既存のプログラムを参考にしても、画面表示のプログラムの前に、SQL文を作成して、実施したものを画面に取り込んでいるような形式にしていますが、同一プログラム内で直接コートチェックと判定を行いたいと思っていますので、詳しい方の回答をお待ちしています。

    • ベストアンサー
    • HTML
  • primary(unique?) keyでwhereしてupdateできない

    mysql5.0を使っています。 IDという項目のPrimary Key、他は特別な設定をしていない項目が複数あります。これらの項目をupdateで更新する際(IDは更新しません、永久に固定です)、そのままでは当然全部の行がupdateされてしまうので条件指定が必要です。そこで更新対象が一意になるよう、whereを使ってIDを指定しようと思ったのですが、なぜかこれが実行されません。SQL文は以下のような感じです。 update my_db set a="a", b="b", c="c" where id="oshiete";(何も変わらない) 色々やって実験してみたところ、キーが一意になるような設定(Uniqueあるいは自動的にそうなるPrimary)をしているとうまくいきません。設定を外すとうまくいきますが、仕様上どうしてもIDは一意である必要があるのでその設定を外す訳にはいきません。しかしなぜかselect文では問題なく動作します。 select * from my_db where id="oshiete"; なぜこのケースでupdateを実行できないのでしょうか? どなたか解決法をご存知の方、どうかお助けください。 よろしくお願い致します。

  • Accessから主キーの無いOracleテーブルにVBAで主キー設定付のODBC接続するには

    Oracle7--------------- Access97 Workgroup Server Release 7.3.2.2.1 TABLE_A----------------ODBC接続(リンクテーブル)     項目1 項目2 項目3 項目4 項目1~項目4は 空白レコードがあり 主KEYが張れない ******************************************************************** 主キーの作成出来ないオラクルテーブルがあります。 Access97からODBC接続を作成する時は (1)マニュアルであれば   対象テーブルに主キーが無ければ 任意の10項目を仮の主キーとして設定出来ますが (2)VBA(自動?)で リンク張ると Dim tab01 As TableDef  Dim db01 As Database  Dim strTABname As String strTABname = TABLE名 Set db01 = CurrentDb Set tab01 = db01.CreateTableDef(UserName & "_" & strTABname, dbAttachSavePWD) tab01.SourceTableName = UserName & "." & strTABname tab01.CONNECT = "ODBC;DSN=****;UID=" & UserName & ";PWD=" & Password & ";ConnectString=con;" db01.TableDefs.Append tab01 主キー設定の無いODBC接続が出来て   データの更新などが出来なくなります。 VBAでも仮の主キー設定付きのODBC接続は  出来ないでしょうか?

  • DB接続を動的に切り替えたい

    VS2005を使用してウェブアプリを作成しています。 アプリ内でDBに接続しているのですがローカル環境で開発しているときとウェブサーバで検証する時とで都度接続文字列を変えてWebServiceをアップロードしているのですが動的に判断して適切な接続文字を選択するようにすることは出来ないものでしょうか 開発環境:WINXP VS2005 .NET 2.0 処理の概要は以下です dim conn as string = DB接続文字列 ・・・この部分を動的に変えたい dim cmd as string = SQL文字列 dim adapter as new OleDbDataAdapter(cmd,conn) ・ ・ といった感じです。 良いアイディアがありましたら教えてください

  • PEAR DBのupdateについて

    PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){   $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • オラクルDBでの不一致の検索

    ORACLE8.0.5において A-DB  code char(10); updte char(14); B-DB code char(10); A-DBとB-DBにおいてcodeが不一致のデータの抽出をする場合、 select B-DB.code from A-DB,B-DB where A-DB.code <> B-DB.code and A-DB.updte >= '20020301000000' and A-DB.updte <= '20020331235959'; 上記のようなSQL文を作成し実行したが、A-DBのcodeに対してB-DBのcodeを全部検索し、B-DBの検索分がすべて不一致になってしまいました。 SQLの考え方がまちがっているのかわからないでいるので、アドバイスをお願いいたします。

  • db2 create functionでエラー

    aix version5 + db2 version9.5.5 の環境でUDFを作成しようとDDLを実行したところ、 以下のエラーがでて作成できませんでした。 db2 9.7 では同じDDLで作成できました。 どうやらcursorの定義に問題がありそうなのですが、 9.5では以下のcursor定義はできないものなのでしょうか? よろしくお願いします。 --エラー内容-------------------------- DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL ステートメントとして処理されました。 SQL 処理中に、そのコマンドが返されました。 SQL0104N "GentaniMeisai CURSOR" に続いて予期しないトークン "FOR" が見つかりました。予期されたトークンに "<SQL_variable_condition_declaration>" が含まれている可能性があります。 LINE NUMBER=15. SQLSTATE=42601 --DDLの中身(一部)------------- DECLARE curGentaniMeisai CURSOR FOR SELECT aaa FROM bbb WHERE ccc = [変数] ;

  • EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なる

    EXCEL2003 VBAで2つのDBに接続してSQLを実行し、異なるDBのTBLを結合する。 こんな方法あるのかどうかわかりませんが、 VBAでDBに接続する際に同時?に2つのDBに接続し1つのSQLで違うDB同士を任意のキーで結合はできるのでしょうか? どなたかわかる方お願いします。 今考えているのは最初に1つのDBに接続し、データを取得後、再度違うDBに接続し取得したデータを先ほどのデータとVBA内で結合しようと考えています。 ほかにいい方法があればアドバイスおねがいします。 ※今まではACCESSを介してこの処理を行っていましたが引継ぎの関係でEXCELのみでこの処理を  実行しなければなりません。

  • oracle 9i と SQL SERVER 2005 DBリンクにつ

    oracle 9i と SQL SERVER 2005 DBリンクについて とても困ってます。 よろしくお願いします。 仕事で、oracle 9iとSQL SERVER 2005をDBリンクさせて、oracle 9iのTableとSQL SERVER 2005のTableを結合させて、SELECT文を作成したいです。 本番環境は、DBサ―bとWebサーバは別々でとりあえずlocal開発環境を作成しています。 <確認したこと> ・global_names = Flase ・ODBCの設定はSQL SERVER 2005に接続確認しました。  →データソース名は、「SQLSRV」です。 ・inithsodbc.oraの設定    HS_FDS_CONNECT_INFO = SQLSRV    HS_FDS_TRACE_LEVEL = OFF ・LISTENER.ORAの設定(編集後再起動しました)  → (SID_DESC = (SID_NAME = HSODBC) (ORACLE_HOME = D:\oracle\Ora9IUTF) (PROGRAM = hsodbc) ・TNSNAMES.ORAの設定 HSODBC = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1521)) ) (CONNECT_DATA = (SID = HSODBC) ) (HS = OK) ) ・DBリンク作成(小文字を認識するため、ダブルクォーテーションで囲います)   CREATE DATABASE LINK DB_LINK_SQLSRV   CONNECT TO "ユーザ" IDENTIFIED BY "パスワード" USING 'HSODBC'; ・SELECT文   SELECT * FROM テーブル名@DB_LINK_SQLSRV; 上記の手順ですが、サービス名が解決できません。

このQ&Aのポイント
  • 横幅40cm以下のFAX機能付きレーザープリンター式複合機を探しています。
  • ブラザー製品についての質問です。
  • 幅40cm以下でコンパクトな複合機をお求めの方におすすめのプリンターをご紹介します。
回答を見る