質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

1907閲覧

データベースの設計に悩んでいます

KongInfoWikiJp

総合スコア9

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

2グッド

1クリップ

投稿2016/03/17 04:29

現在とあるゲームポータルのWikiをPHP(Ethnam)とPostgreSQLで作成したいと思っているのですが、特に1対nやn対nのデータをどのように管理すれば良いかがよくわかりません。
どなたかアドバイス頂けないでしょうか?


ゲーム情報

  • ゲームID (ページ表示のパラメータとして使う)
  • ゲーム名
  • タグ (1〜複数個 公式のゲームページに追加されているもの)
  • カテゴリ (公式より選定したリストから1つ)
  • 製作者 (1〜複数人)
  • 簡単な説明 (1文程度)
  • スクリーンショット
  • 遊び方
  • 操作方法 (1〜複数個)
  • Badge情報 (0〜複数個)

Badge情報

  • Badge名
  • Badge画像
  • Quest名 (空欄の場合あり)
  • 獲得できるpoint
  • 獲得条件

Quest情報

  • Quest名
  • Medal画像
  • Medal名
  • 獲得できるpoint (対象Badgeをコンプリートした時にもらえるpoint)

Badge Of The Day情報

  • 日付
  • Badge情報
act823, lib👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

詳しいことを書くのは混乱すると思うので、
フワッとした概念だけ書きます。

■1:N
・テーブルを作る必要がある場合
フィールドが2つ以上は参照先(1)の主キーを参照元(N)のフィールドに持たせる。
・テーブルを作る必要がない場合
text型で作成→Nで管理しようとしたデータをカンマ等のセパレータで区切り1つのフィールドで管理。

■N:N
これは中間テーブルと呼ばれるレコードとレコードを結びつけるテーブルを作成する必要があります。
今回だと「ゲーム情報.タグ」がその対象の一つです。
例えば、動画のタグ
ゲームAに「面白い」と「高画質」の二つのタグが関連されているとします。
この場合はゲームAが登録されているゲーム情報テーブルのIDとタグそれぞれのIDを結びつけます。

ゲームA=面白い
ゲームA=高画質

上記のイコールの部分をテーブルで管理する方法が中間テーブルとなります。
具体的な実装例は検索で詳しくまとめてるサイトがあるので、頑張ってください。

投稿2016/03/17 07:38

編集2016/03/17 08:13
m.kosuda

総合スコア153

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

1対nの場合(「ゲーム情報」の「Badge情報」に当たるんでしょうか)は

  • ゲーム情報に主キーを作る
  • Badge情報にゲーム情報の主キーを格納する

ことでで、実現できます。

n対nの場合もっと複雑になります。
よく考えられるのは、突き合わせるテーブルを持たせることです。

SQL

1CREATE TABLE `table_a` ( 2 `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, 3 `text` VARCHAR(20) NOT NULL, 4 PRIMARY KEY (`id`) 5); 6 7CREATE TABLE `table_b` ( 8 `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, 9 `text` VARCHAR(20) NOT NULL, 10 PRIMARY KEY (`id`) 11); 12 13CREATE TABLE `relations` ( 14 `table_a_id` BIGINT UNSIGNED, 15 `table_b_id` BIGINT UNSIGNED, 16 INDEX (`table_a_id`,`table_b_id`) 17); 18```とすると、n対nが実現できると思います。 19もっとスマートな方法があるかもしれませんが・・・

投稿2016/03/17 04:48

編集2016/03/17 07:59
shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KongInfoWikiJp

2016/03/17 14:25

SQLの知らない書き方も知れてためになりました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問