2017-11-07 6 views
0

私はSQLを初めて使用しています。これは私の最初の投稿です。私は多くの非常に似通った答えを見てきましたが、私の質問に結論づけることはできませんでした。ここでは、私がゲームデータベースのためにしようとしているものの例です。多対多のリレーショナルデータベース

私はプレーヤーのキャラクター情報が保存されているテーブルを持っています。私は可能性のあるすべてのステータスが保持されている別のテーブルを持っています。私は関係を作成する方法を把握しようとしていますが、最初のテーブルの文字エントリのどれか/すべて/なしは、2番目のテーブルのステータスエントリのすべて/すべて/なしにリンクできます。私の研究は、おそらく第3のテーブルが必要であり、複合主キーおよび/または代理キーを使用する必要があるかもしれないことを私に示していますか?

もう一度、初めて申し訳ありませんが、これを正しく実行していない場合。誰も私にこの問題を考える方法の手がかりを与えることができますか?ありがとう。


ここでは、レスポンスに基づいたアップデートです。私は達成したいと思っていたことをしているようです。コードは次のとおりです。

create table characters (
    char_id int primary key auto_increment, 
    name varchar(25) 
    ); 

    create table health_status (
    status_id int primary key auto_increment, 
    stat_name varchar(15) 
    ); 

    create table char_status (
    char_id int, 
    status_id int, 
    primary key (char_id, status_id) 
    ); 

    insert into characters (name) values ('Godzilla'); 
    insert into characters (name) values ('King Kong'); 
    insert into characters (name) values ('Mecha-Dragon'); 
    insert into characters (name) values ('Chris Hanson'); 
    insert into characters (name) values ('Journey'); 
    insert into characters (name) values ('Lou Diamond Phillips'); 
    insert into characters (name) values ('RedHot'); 

    insert into health_status (stat_name) values ('Bleeding'); 
    insert into health_status (stat_name) values ('Shaken'); 
    insert into health_status (stat_name) values ('Frightened'); 
    insert into health_status (stat_name) values ('Petrified'); 
    insert into health_status (stat_name) values ('Poisoned'); 
    insert into health_status (stat_name) values ('Slowed'); 
    insert into health_status (stat_name) values ('Rushed'); 
    insert into health_status (stat_name) values ('Endowed'); 

    insert into char_status (char_id, status_id) values (1, 1); 
    insert into char_status (char_id, status_id) values (1, 3); 
    insert into char_status (char_id, status_id) values (1, 6); 
    insert into char_status (char_id, status_id) values (2, 2); 
    insert into char_status (char_id, status_id) values (2, 4); 
    insert into char_status (char_id, status_id) values (3, 7); 
    insert into char_status (char_id, status_id) values (6, 8); 
    insert into char_status (char_id, status_id) values (7, 2); 
    insert into char_status (char_id, status_id) values (7, 7); 

    select characters.name, health_status.stat_name 
    from characters 
    left join char_status on characters.char_id = char_status.char_id 
    left join health_status ON health_status.status_id = 
    char_status.status_id; 

私には3つの質問があります。誰かがこれをクリーンアップすることができる方法、または私の目標を達成するためのよりよい方法を見ていますか?また、テーブルchar_statusにある化合物PKを実際に何か役に立つものにしていますか?そして最後に、文字名を一度だけリストし、それに関連するすべてのステータスを照会するクエリで出力を整理する方法がありますか?これは別の言語のためのものですか?みんなありがとう!あなたは、さらに新しいテーブルを作成し、そこにデータを配置する必要が言うあなたの構造に基づいて

+0

MySQLを使用していると見に値を追加するには、このクエリを実行し、私はあなたがMySQLのワークベンチのような何かをしようと提案します。これを使用すると、ドラッグ&ドロップを使用してそのような関係を作成することができ、このようなリレーショナルモデリングに慣れ親しむのに役立ちます。 – harandk

+0

こんにちは。情報モデリングとリレーショナルデータベース設計に関する入門書を読む必要があります。これはあなたの質問が欲しいものですが、個別のチュートリアルの例ではありますが。どのように答えを正当化することができます - あなたが何も知らないときは、ゼロから説明し正当化しなければなりません。特定の仕様に関する特定のコードやデザインについて特定の質問がある場合は、質問してください。 – philipxy

答えて

1

。**

あなたがにtableAとテーブルBとの間を接続するためにはあなたが プライマリキーを持っている必要があります他のものにおけるその参考文献およびその参考文献

**です。多対多の関係は、tableAがtableBの多くの要素に依存し、その逆も同様です。

まず、状況に応じてテーブルを正規化する必要があります。

はまた、あなたがあなたの研究で見つかったよう one-many and many-many etc..

1

を見てNormalization_tuorial 次を見てください

から「ID」(メインフィールド)を保持する2つのフィールドを持つ第三のテーブルを作成します

CREATE TABLE `many_to_many` (`information_id` INT(11) NOT NULL , `status_id` INT(11) NOT NULL , PRIMARY KEY (`information_id`, `status_id`)) ENGINE = MyISAM; 

2つのフィールドに依存するPRIMARY KEYへの支払いは有料です。

今、あなたはすべてのために追加することができますが

とSTATUS_ID多くのinformation_id関係のために、多くのSTATUS_ID関係をinformation_id。最初の試みのために

が、それ

INSERT INTO `many_to_many` (`information_id`, `status_id`) VALUES (1, 1), (1, 2), (2, 1), (2, 2); 
関連する問題