• ベストアンサー

現在データベースの勉強を独学で勉強しているのですが

質問すべき場所が適合していなければ申し訳ありません。 データベースの勉強を最近始めたのですが、以下のような問いがあり、それに対してどのような回答をすればいいのかわかりません。 是非教えていただきたく思います。 また、データベースの勉強を一から始めるにあたってどのように勉強していくのがいいのか教えていただけたら幸いです ― 問 ― バスケットボールのリーグ戦における1シーズンのデータを取るために、次の関係スキーマXとYに基づく2つの関係表を持つ関係データベースを考える。 ・選手の所属チーム情報 X (氏名、所属チーム) ・試合における得点情報 Y (氏名、所属チーム、相手チーム、得点時間) ただし、関係データベースは次の条件を満たす。 ・同じ対戦相手とは一度だけ試合をする。 ・データベース中の選手とチームは名前により一意に識別される。 ・試合の得点は得点した選手の所属チームに対し、すべて2ポイント与えられ、3ポイントやフリースロー等による1ポイントの得点はないものとする。 ・選手はシーズン中に移籍により、複数のチームに所属することがある。 ・得点開始時間は試合開始から経過時間を分単位で記録し、同じ対戦カードで同一の時間帯には複数の得点者はいないこととする。 ・どのチームにも複数の選手が所属している。 このようにデータが与えられている場合に以下の情報を求める方針を関係代数を用いて式として表せ。 また、関係代数の利用可能な演算は集合演算(和、差、積、商)、選択、直積、射影がある。 1)複数のチームに所属した選手 2)Aというチームから得点を取られたことのないチーム 3)少なくとも一試合で15分以降に得点したチーム 4)所属したことのある全ての選手がシーズンを通して得点を取ったことのないチーム

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

関係代数式は確かにデータベース理論ですが、どちらかというと情報数学というようなアカデミックな分野ですので、数学カテゴリなどの方がコメントが付きやすいかもしれません。コンピュータカテゴリはどうしても実務寄りになります。 (情報処理試験でもこういう形ではあまり出題されないと思いますしね) そういう意味では私も例外ではないので、自信があるわけではないのですが、考え方は導けるので、参考になればご覧ください。 1) 複数のチームに所属した選手 =同じ所属チーム以外の所属チームがある選手 =πX.氏名(σX.氏名=X.氏名 ∧ X.所属チーム<>X.所属チーム(X×X)) 2)Aというチームから得点を取られたことのないチーム =すべてのチーム-Aというチームから得点を取られたチーム =π所属チーム(X)-π相手チーム(σ所属チーム='A'(Y)) 3)少なくとも一試合で15分以降に得点したチーム =15分以降に得点したことのあるチーム =π所属チーム(σ得点時間>=15(Y)) 4)所属したことのある全ての選手がシーズンを通して得点を取ったことのないチーム =すべてのチームー得点をとったことのあるチーム =π所属チーム(X)-π所属チーム(Y) 結合は使えないようなので、πは射影、σは選択です(機種依存文字でないことを祈ります) 1)は本当は属性名変更しないとダメな気がするのですが。。 =π氏名(σ氏名=氏名1 ∧ 所属チーム<>所属チーム1(X×(δ氏名←氏名1,所属チーム←所属チーム1(X))))

lalala-21
質問者

お礼

丁寧な回答ありがとうございます。 やはり、この質問内容だとカテゴリが微妙なんですね・・・ もし、上記の質問内容をSQLで示す場合はどうなるか、という質問ならこのカテゴリなんでしょうか? もしそうであれば、SQLでの書き方を教えてもらえたら幸いです

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

実際のデータベースは集合演算ではないので、射影ではDISTINCTをつけて重複を排除します。また、結合も要約も実装されているので、書き方も変わってきます。 今回の例では、そのまま関係代数式っぽく書くと 1)SELECT DISTINCT X.氏名 FROM X, X AS X1 WHERE X.氏名=X1.氏名 AND X.所属チーム<>X1.所属チーム 2)SELECT DISTINCT 所属チーム FROM X EXCEPT SELECT DISTINCT 相手チーム FROM Y WHERE 所属チーム='A' 3)SELECT DISTINCT 所属チーム FROM Y WHERE 得点時間>=15 4)SELECT DISTINCT 所属チーム FROM X EXCEPT SELECT DISTINCT 所属チーム FROM Y となりますが、1)2)4)については実際は、以下のようにします。 1)SELECT 氏名 FROM X GROUP BY 氏名 HAVING COUNT(*)>1 2)SELECT DISTINCT 所属チーム FROM X WHERE 所属チーム NOT IN (SELECT 相手チーム FROM Y WHERE 所属チーム='A') 3)SELECT DISTINCT 所属チーム FROM X WHERE 所属チーム NOT IN (SELECT 所属チーム FROM Y)

lalala-21
質問者

お礼

2度もの回答ありがとうございました。 お手数をおかけしてしまい申し訳ありません・・・ SQLと関係代数は結構かき方が違うものなのですね。 勉強することが増え、大変だと思うと同時に熱意が沸いてきたように感じます。 これからも頑張ってデータベースの知識を深めていこうと思います。 本当に回答ありがとうございました!

関連するQ&A

  • シーズン中のトレードについて

    シーズン中のトレードに関して疑問に思っていることがあるので質問します。 そのシーズンの試合数を140として、Aというチームに所属していてそれまで全ての試合に出場しているある選手が31試合消化後にトレードでBというチームに移籍したとします。 Bというチームはまだ30試合しか消化しておらず、残り試合は110。仮にこの選手がBというチームで残りの試合全てに出場した場合は記録上141試合に出場したことになるのでしょうか?そんなことが可能なんでしょうか?

  • 試合ごとの出場選手の一覧

    さまざまな国にクラブチームがありますが、それらの試合ごとに出場選手が一覧でわかるデータベースのようなものはありませんか? 第何節のどのチームのスタメンが誰で、途中出場が誰で、得点者が誰で、といったものを知りたいのですが。 インターネットの無料サービスなどないでしょうか。

  • MySQLの構造について

    応援しているサッカーチームの試合データをMySQLを利用しテーブルに格納したいと考えています。 そこでMySQLやPHPに詳しい方にお聞きしたいことがあります。 例えばA・B・Cと3チームあるとしたら、A対B、A対Cの試合データは格納しますが、B対Cのデータは不要です。あくまでもAチームに関するデータのみを格納し、私が開設しているサイトで閲覧者に検索フォームから自由な形でデータを参照できるようにしたいです。 参考までに格納したい試合のデータは下記のようなデータです。 http://www.j-league.or.jp/result/2014/j2/030201.html 現在、既に一定のデータはテーブルに格納しています。現在のテーブルの構造です。 https://www.dropbox.com/s/z2qc2zff2fn8m8f/gamedb.pdf?dl=0 スタメンの選手やベンチの選手、交代選手、警告をもらった選手、得点者などはテーブルに格納していません。これらのデータは試合ごとに大きく数が異なるのでどのようにして格納すれば良いのか分からなかったので。 現在は格納していないこれらのデータを格納することで下記のような条件を指定しても対象データが羅列されるようにしたいです。 ・○○選手がイエローカードをもらった試合。 ・点を取られている選手ランキング。□□選手(※対戦相手の選手)には一番点を取られているなど。 ・○○選手がスタメンだった試合。 ・○○選手が途中出場した試合。 ・○○選手はこれまで△試合に▲分出場している。 ・□分~□分の間の得点は何点。逆に失点は何点など。 などなどです。 私が現在思いついている構造ですが、新しくテーブルを複数作成する。こういったケースではそれぞれのテーブルに共通のIDを振る必要があるとのことですが、これは日付(開催日)で代用しようと思っています。同じ日に2試合は絶対にないので。 作成するテーブルは下記のようにします。 ・ホームチームスタメンテーブル ・アウェーチームスタメンテーブル ・ホームチームの警告をもらった選手テーブル ・アウェーチームの警告をもらった選手テーブル ・ホームチーム得点者テーブル ・アウェーチーム得点者テーブル .....などなど。 こういったテーブルを作成し、それぞれID(開催日)と一定数のカラムを予め用意する。得点者のテーブルでしたら1試合で一方のチームが10点を取ることは限りなく0に近いのでとりあえず10用意する。同じように得点した時間も10用意。 datadating(開催日) | goal_1_min(得点時間) |goal_1(得点者) | goal2_min(得点時間) | goal2(得点者) |.......... このように格納していけば思い通りの結果が得られるようになるのかな?と思っていますが、果たしてこのようなテーブルで作成していき、後々サイト側の検索フォームから指定した条件で無事に結果を得られるか不安です。 ちょっとしたことでも良いので、詳しい方の意見をお聞きしたいです。 どうぞよろしくお願いします。 長文失礼しました。

    • ベストアンサー
    • MySQL
  • MLB(ロサンゼルス・エンジェルス)

    こんにちは。 11日(日本時間12日)の試合で、大谷選手が所属するロサンゼルス・エンゼルス(LAA)チームが14連敗の後、まるで取り返すかのように 連勝を続けているようです。大谷選手のHR数が、ここ数試合多くなってきているような気がします。このままだと、POシーズンに進出の可能性もあるかと思いますが・・・ ぜひ、教えて下さい。 よろしくお願いします。

  • Jリーグシーズン初得点した対戦相手はJ2へ落ち!

    なんのTV番組だったか、思い出せません。 「ある選手がシーズン初得点した相手チームは、J1からJ2に落ちるってジンクスがある」って話し。 3年ほど続いているそうです。 2012年対戦相手はガンバ大阪で、ガンバは今入れ替えラインにいるそうですね。 正直に申しますと、シーズンが何時から始まるのがわからないので、検索してても「?」です。 なんかもやもやして気持ち悪いので、お尋ねします。 ある選手って誰でしたっけ? その話題が出た、番組はなんでしたっけ? それ言った人も教えて下さるとうれしいです。 よろしくお願いします。

  • 阪神タイガース、日本一の前後、大逆転で勝利した試合

    まず、タイトルの通り。 「プロ野球の阪神タイガースが、日本一になった、昭和60年(1985年)前後に、阪神甲子園球場(兵庫県西宮市)によるホーム戦の試合で、大逆転で勝利した試合に、あるアナウンサーが、遭遇した時の逸話」から、質問します。 問題の逸話は…。 「当時、局アナとして、朝日放送に所属していて、毎週月曜日~金曜日の早朝から、AMラジオで放送してた、ワイドショー的な番組の司会を、担当してた道上洋三さん。 番組のレギュラー出演者や、担当スタッフと相談して、「視聴者を、指定の人数の抽選により、阪神甲子園球場で開催する、ホーム戦観戦に招待して、レギュラー出演者と一緒に、観戦する」企画を、実行した。 当日は、当選した多くの視聴者は、道上さん等の番組のレギュラー出演者と共に、番組が確保した球場の指定の観覧席で、観戦した。 所が試合は、比較的初めの回の表の攻撃で、対戦相手のチームが、大量得点として入れてしまった。 道上さんは、問題の対戦相手の大量得点について、最初は、「対戦相手のチームに、大量に得点を取られると、以前であれば、阪神タイガースは、負ける試合が多かった」的な内容で、ファンとして呆れてしまったそうで、一緒に観戦した視聴者も、呆れてしまった人も、結構出たそうである。 所が、この後の回の裏の攻撃以降、阪神タイガースの選手の打線が、良い動きになったかして、対戦相手のチームの得点に何とか追い付き、更には逆転するのが出来た。 この為、試合終了の 時点では、言わゆる「大逆転勝利」として、阪神タイガースが、勝利したと言う…」 逸話が、あるそうです。 因みに、問題の試合…。 「詳しい得点迄は、分からないが、対戦相手は、広島カープ」だった様に、記憶あります。 そこで、質問したいのは…。 「阪神タイガースが、日本一になった昭和60年前後に、阪神甲子園球場でのホーム戦で、対戦相手のチームに、大量に得点を取られたのが、結局は何とか追い付き、言わゆる「大逆転勝利」 となった試合。 対戦相手は、広島カープ辺りだった様に思うが、昭和何年の何月何日頃にあった、何と言うチームが対戦相手で、試合終了時点での得点は何対何で、道上さんが遭遇した、「大逆転勝利」の発端になったのは、何回裏の阪神タイガースの攻撃で、打席にどの選手が、出て来て以降の時なのか? ただ、問題の試合だが、勝ち負けの選手は誰だったかは、分かればで構わないが…?」に、なります。

  • クライマックスシリーズのルールについて

    クライマックスシリーズは無くなればいいと思いますが、消化試合を無くすためにといわれる事にも一理あると思います。それなら、ゲーム差を大いに尊重したものにしてほしいのです。以下のルールにしたらいいと思いました。いかがでしょうか? 1ステージ…2位と3位の3試合の総得点で勝負 ハンデは、2位と3位のゲーム差×10を2位チームに加点した状態から開始。 2ステージ…首位と1ステージ勝者の5試合の総得点で勝負 ハンデは、シーズン終了時の首位と2位のゲーム差(3位チームが勝ちあがっても)×10を首位チームに加点した状態から開始。 厳しいルールと思われるかもしれませんが、そもそも2位、3位チームはごみチームなんです。そのごみチームに対してわずかなチャンスを与えてやろう、そしてこのルールでも勝ちあがったら首位チームを上回っていると判断していいと思うのです。2位、3位チームが勝ちあがって選手、監督はもっともらしい顔をしていますが、それは大きな誤りだと思います。改めて意見をくださればと思います。

  • 昨日、サッカーの試合で、いっぽうのチームが試合放棄? なぜ?

     昨日のテレビ。サッカーの試合で、いっぽうのチームが選手を引きあげたため、相手チームがやすやすと得点を入れていましたが、どうしてこういうことになったのですか?  フェアプレーがどうとか言っていましたが、なんのことか、わかりませんでした。  Jリーグの、重要な試合だったのですか?

  • MySQLデータベースについて

    データベースについて詳しい方にお聞きしたい事があります。 初心者なので書いている内容におかしな点もあるかと思いますが、よろしくお願いします。 5年ほど前のJavaを習っていて、簡単なデータベースを作ったことはあります。 □現在、会社が違うレンタルサーバーを一つずつ借りています。 A社のサーバー上で作成したデータベースをB社のサーバー上に公開しているサイトから呼び出し、テーブルを一覧表示できるのでしょうか? □初心者がデータベースを作成するにはphpMyAdminを使用するのが一番良いでしょうか? 使い方を検索してみたらちょっと難しそうですね。 Javaでデータベースの勉強をしていた時はあらかじめ作ったフォームにデータを入力していくだけだったので、同じような感じのシステムはないかなと思いました。 □現在使用しているサーバーはMySQLが5つ使えると書いています。 既にWordPressでブログ開設していて4つ使用しています。残りは一つ。 野球チームのデータベースを作成しようと思っているのですが、これまでの試合の記録のデータ、これまでの選手のデータのデータベースを作成したいと思っています。 MySQLは残り一つですが、この二つのデータベースを作る事は可能なのでしょうか?二つ必要ですか? □スマホのサイトも作成しているんですが、PCサイトと同様にデータベースに接続し、一覧表示できるのでしょうか? スマホでPHPが使えるのかなと思ったので。 ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 試合に出れないバスケチームは辞めた方がいいですか?

    レベルは高いけど、試合に出れないバスケチームにいるよりも試合に出れるチームに移籍した方がいいでしょうか? スポーツは試合に出てナンボ。 自分より上手い人がいるチームでないと成長出来ない。 どっちも聞きます。 サッカーでも海外に出て失敗して帰って来た選手には「時間の無駄だった」と厳しい意見も良く見ます。 所属は試合に出れるチームに変えて、練習はレベルが高いところにも参加させてもらうのがベストでしょうか?