• ベストアンサー

テクニカル データベース午前の問題の質問

データベース(完全教本) 2005年度版を勉強していますが、分からない部分があります。 よろしくお願いします (他のところで質問しましたが反応がないので、コチラで質問しなおしました) 平成15年 テクニカル(データベース)の午前問題 29番目についてです(本では37P) 問題: http://smickey.cool.ne.jp/cgi-bin/text/textprint.cgi?c=2&y=15&s=0&no=29 疑問点: 問題文の(1)営業員は複数の担当地域が定められている(2) 1つの地域を複数の営業員が担当している 1 * 営業員-------担当地域 1 * 地域 -------営業員 を導きました。 ただ回答の解説をみると、  ある営業員は複数の地域を担当し、ある地域は複数の営業員が担当する。すなわち、”営業員”と”地域”の間に、多対多の関係があることがわかる。 となっています。 選択肢をみると、地域、担当地域、が出てきているので解説のように、「営業員と地域」とくくってしまうのが分かりません。 問題文のとおり、担当地域と地域をわけて考える必要があるのではないか?と思ったのです。 この点、このような解説の仕方でただしい、と思えないので教えてください。

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

  • ベストアンサー
noname#22222
noname#22222
回答No.4

s_husky です。 再回答にミスがありました。 この場合、[担当地域]のグループ=[地域]という考えです。        ↓ この場合、[地域]のグループ=[担当地域]という考えです。 まお、具体的な確認テーブルを示しておきます。 <受注> ID    顧客_ID  営業員_ID 売上日 --------------------- 1     鈴木    中村    2006/02/10 <営業員> ID 氏名 担当地域_ID -------------- 1 中村 東区 2 田中   東区 <顧客> ID 名称 地域_ID -------------- 1 鈴木 東区一丁目 <担当地域> ID     名称 -------------- 1      東区 2      西区 3      南区 <地域> ID     担当地域_ID   名称 ------------------ 1      東区        東区一丁目 2      東区        東区二丁目 3      東区        東区三丁目 ※Access2003でリレーションシップを張って実際にテーブルに登録しそれを表示しコピーしたものです。

gooqoo_1972
質問者

お礼

回答有難うございます。 [地域]のグループ=[担当地域] とのことですので、 <地域> ID     担当地域_ID   名称 ------------------ 1      東区        東区一丁目 2      東区        東区二丁目 3      東区        東区三丁目 は、 <地域> ID     担当地域_ID   名称 ------------------ 1      1(担当地域の)  東区一丁目 2      2(担当地域の)  東区二丁目 3      3(担当地域の)  東区三丁目 ですか? ここだけですね。 今のところ分からないのは。

その他の回答 (3)

noname#22222
noname#22222
回答No.3

s_husky です。 先の回答を全面的に訂正します。 一部、回答に影響されていました。 よくよく、1:多の関係を見直すと、 [受注]多-1[顧客]多:1[地域]多:1[担当地域]1:多[営業員]1:多[受注] が正解ではないでしょうか? この場合、[担当地域]のグループ=[地域]という考えです。 レイアウトでは「ウ」が正解ではあるが、 ・・・・・[地域]1:多[担当地域]多:1[営業員]・・・・・ は、 ・・・・・[地域]多:1[担当地域]1:多[営業員]・・・・・ のミスではないのでしょうか? ※全くもって、面目ない再回答です。 ※プロは、どう考えるのでしょうか?

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

そんなに難しく考える必要は無いですよ。 営業員IDと地域IDの間に多対多の関係が存在するということです。 地域と担当地域は地域コードで考えれば同じものです。 営業員から見ると地域=担当地域です。 この部分はDBがどうのというより通常の常識の範囲です。 解説がおかしいとか、中抜きだとかは感じませんが。

noname#22222
noname#22222
回答No.1

普通にテーブルを設計すれば、 <受注台帳> ID 顧客_ID 担当者_ID <顧客マスター> ID 氏名 地域_ID ***************** 顧客マスター.地域_ID(多-1)地域.ID ***************** <担当者> ID 氏名 担当地域_ID ***************** 担当者.地域_ID(1-多)担当地域.ID ***************** <地域> ID 地域名 担当地域_ID ***************** 地域._担当地域_ID(1-多)担当地域.ID ***************** <担当地域> ID 担当地域名 よって、 1、顧客マスター.地域_ID(多-1)地域.ID 2、担当者.地域_ID(1-多)担当地域.ID 3、地域._担当地域_ID(1-多)担当地域.ID の条件を満たしているモデルは... この場合、「担当と担当地域、地域と担当地域との間には1:多の関係がある」というのは判ります。 「すなわち、”営業員”と”地域”の間に、多対多の関係がある」というのは、<[担当地域]を媒介にして[担当者]と[地域]との間には、実質的な多:多の関係が成立する>ということでしょう。 しかし、いかにも、解説本らしい中間の説明を省いた結論的な概念を覚えさせようという魂胆が透けて見える回答ですね! ※当方、スーツのデザイナーでDB言語のトウシロです。 ※間違っていたら、スミマセン!

gooqoo_1972
質問者

補足

やっぱり実際のテーブル設計をやったことがないせいでしょうか。 設計した結果のテーブルを素直に導き出せないでいます。 (ただなんとなく理解はできるようになりました) ただ営業員(この場合は担当者テーブル)と地域の間に、 担当地域というものが存在している事  それが多対多の関係である事 はあぁ、なるほど、と思いました。 >しかし、いかにも、解説本らしい中間の説明を省いた結論的な概念を覚えさせようという魂胆が透けて見える回答ですね! この点、凄く納得です。 そうならないために高いお金を出して解説が一杯ついている本を買ったのですが。 (実績NO1とかいうから・・・) 何回か練習して素直に教えてもらったテーブルを設計できるまでもうちょっとがんばります。 ありがとうございました。 p.s >>スーツのデザイナーでDB言語のトウシロです。 凄いですね。 なぜ分かるんですか? 私なんかコンピュータで飯食ってんのに分からんし。

関連するQ&A

  • 1つのサイトで複数のデータベース

    mySQL(phpMyadmin)を利用しています。 1つのサイト上に2つのショッピングカート(osCommerce)を公開したいです。 http://www.■■■.com/cgi/shop/ http://www.■■■.com/cgi/shop2/ このときのデータベースの扱いがよくわかりません。 1つのデータベース・2人のユーザーだと無理なような気がするのですが、複数のデータベース・それぞれにユーザー設定だと問題ないでしょうか? 専用サーバを利用しているので複数のデータベースを作ることは可能なようです。

  • 英語の問題について回答お願いします

    英語の過去問題を解いたのですが、解説がなく、独力では解決できなかった問題が数点あります。 どなたか英語の得意な方、解説をお願い致します。 画像にまとめてみましたのでそちらを参照してください(サイズ大きいです) http://upload.fam.cx/cgi-bin/img-box/x5r120102134636.jpg

  • 極めて簡単そうな問題

    これからデータベースと連携するサイトをPerlで作ろうとしているにもかかわらず、下記のスクリプトでさえエラーが出ます。どうやら、最初のprint文でいつもエラーが出ます(Bareword found where operator expected ...)。何がいけないのか、教えてください。お願いします。 #! c:\Perl\bin\perl print "Content-type: text/html\n\n"; use CGI qw(:standard); use Win32::ODBC; print << body1; <html><head> <title>Order Form</title> </head></html> body1 exit();

    • ベストアンサー
    • Perl
  • データベースへのデータの受け渡し

    今データベースとCGIを自分で作り掲示板のような物を作成しています。 その中で、データベースにデータを受け渡す部分を if($syoujyou ne "" and $geninn eq "" and $taisyo eq ""){ $INS = $dbh->prepare("INSERT INTO $DBtable (syurui,syoujyou,geninn,taisyo) VALUES (\'$syurui\',\'$syoujyou\',\'$geninn\',\'$taisyo\')"); $INS->execute or $err2 = "execute"; } 上記のように記述しています。 このままでCGIを実行し、書き込みを行うとデータがデータベースに受け渡されません。 試しにif文を除き強制的に実行してもダメでした。 その代わり、if文を除くと何も書き込まない状態(受け渡しの変数内<(\'$syurui\',\'$syoujyou\',\'$geninn\',\'$taisyo\')>がNULL)だと書き込まれます。 つまりデータベースには何もない状態でテーブルの中にカラムが作成されます。 データベースは create table データベース名 ( id INT(4) AUTO_INCREMENT NOT NULL, syurui TEXT NOT NULL , syoujyou TEXT NOT NULL, geninn TEXT NOT NULL, taisyo TEXT NOT NULL, PRIMARY KEY(id) ) AUTO_INCREMENT = 1; のようにして作っています。 更に、上記の中のINSERT文をprintし、表示された物 INSERT INTO データベースの名前 (syurui,syoujyou,geninn,taisyo) VALUES ('ハード','あ','い','う') を直接プロンプトから実行した場合データは正しく挿入されます。 更にデータを消す文として if(($delpass == '****') and ($delfilid ne "")){ $DELETE = $dbh->prepare("DELETE FROM $DBtable WHERE id=\'$delfilid\'"); $DELETE->execute; $DELETE->finish; } と記述しているのですが、これは正常に動作します。 何がいけないのかが判らないので詳しい方教えてください。

  • SQLとデータベースについて?

    すいません質問させてください。 2つのデータベースがあります。 データベース名が -------------- SC CM -------------- の2つです。 そこに複数のテーブルがあります。 そこで質問なのですが、SCのデータベースのテーブル名AAAとCMのデータベースのテーブル名がBBBの 中から列名の店コードが違う物だけ抽出したいです。 ------------------------------- データーベースSC テーブルAAA 店コード、店名、店地域 123,あ,東京 231,い,大阪 312,う,京都 111,え,福岡 ------------------------------ ------------------------------- データーベースCM テーブルBBB 店コード、店地域 123,東京 111,福岡 ------------------------------ 上の様な造りになっています。 抽出結果 ----------------------------- 店コード、店名、店地域 231,い,大阪 312,う,京都 ---------------------------- 私なりの考えなのですが SELECT * FROM AAA,BBB where AAA.店コード <> BBB.店コード このSQL文を改変して出来ると思われますか? SCのデータベースからCMのデータベースを比べることは、出来ますか? よろしくお願いします。

  • ACCESSで、簡単なカード型データベース

    ACCESSで、簡単なカード型データベース  WindowsXPのもとで、  ACCESS2002  を動かしているのです。  何とか使いこなせるように四苦八苦しているのですが、なかなかマスターできません。  ACCESSには、作成するサンプル練習問題が作ってあってこの順序通りを入力すれば、データベースを作れるようになっています。  しかし、この入力が何を意味して、どのような意図で、この入力をしているのか分かりにくく、途中で入力をあきらめてしまうか、中断してしまいます。  意味が理解できず、また、言葉が理解できないです。  できる人には、まだ、努力が足りないの一言ですが、作りたいのは、練習問題のような複雑なデータベースではなく、ひとつのデータベースのみの 簡単なカード型データベース を作りたいのです。  もともと、ACCESSが、カード型データベースを意図したものでなく、 リレーショナルデータベース を意図して作成されているので、どうしても、練習問題も、複数のデータベースとの関係を関係付ける説明になります。いろいろの複数のデータベースを関連付けることができます関連付けのいろいろな機能を使用できます。  となります。  簡単なひとつのデータベースのみの 簡単なカード型データベース の作り方がホームページに解説があれば、初心者には、これをなぞればよく、導入しやすい便利だと考えるしだいです。  作るうえで、何か要領がありましたら、よろしく教授方お願いします。  敬具

  • プログラミング(C言語)の問題がわかりません。

    大学の授業でプログラミング(C言語)の問題が出されたのですが さっぱりわからず困っています。 下記が問題文です。 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10339.txt わかる方がいましたら回答よろしくお願いします。

  • データベースの必要性について

    現在データベースの役割について勉強しています。 その中で、データベースの必要性として、以下のような説明があります。データベースが存在する前のデータ管理についてわからない為、 (1)~(3)が理解できません。 (1)~(3)について、具体的に教えてくださいませんか? よろしくお願いします。 -------------------------------- データベースが存在する前は、プログラムごとにデータを保持している。 以下のような問題点がありました。 (1)冗長性の問題:同じデータが複数のファイルに重複して存在する為、多くのデータ格納領域が必要になります。 (2)整合性の問題:データに変更があった場合、各プログラム毎のデータをすべて変更する必要があります。このため、データの更新漏れが発生しやすくなります。 (3)独立性の問題:プログラムは物理的にデータが格納されている位置を指定して処理していたため、データの構造が変わってしまうとプログラムも変更する必要がありました。

  • 先ほども質問させて頂いた問題について

    二次関数y=x^2-2x+m-1のグラフが異なる2点で交わる時、定数mの値の範囲を求めよ。という問題で、このピンクの四角のような形になる理由をどなたか解説をお願いいたします! 先程は問題文を書いておらず、再投稿させて頂きました。

  • CGIと permissionの問題

    win2000のos上で,ApacheでCGIをローカルで試していますが, 下記のようなerrが出ます。 Forbidden You don't have permission to access /namazu.cgi on this server. --------------------------------------------------------------------------------Apache/1.3.19 Server at 127.0.0.1 Port 80 logを見ると,下記です。 [Sun Sep 16 17:22:04 2001] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: c:/~nakai/namazu.cgi このdirの .htaccess は下記です。 AllowOverride Options Options +ExecCGI 一方,Apache の httpd.conf  #ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/" ScriptAlias /cgi-bin/ "C:/~nakai/cgi-bin/" # # "C:/Program Files/Apache Group/Apache/cgi-bin" should be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # #<Directory "C:/Program Files/Apache Group/Apache/cgi-bin"> <Directory "C:/~nakai/cgi-bin/"> AllowOverride None Options None # Options ExecCGI Order allow,deny Allow from all SetHandler cgi-script </Directory> どのあたりに問題点かあるのでしょうか?

専門家に質問してみよう