私は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を実際に何か役に立つものにしていますか?そして最後に、文字名を一度だけリストし、それに関連するすべてのステータスを照会するクエリで出力を整理する方法がありますか?これは別の言語のためのものですか?みんなありがとう!あなたは、さらに新しいテーブルを作成し、そこにデータを配置する必要が言うあなたの構造に基づいて
MySQLを使用していると見に値を追加するには、このクエリを実行し、私はあなたがMySQLのワークベンチのような何かをしようと提案します。これを使用すると、ドラッグ&ドロップを使用してそのような関係を作成することができ、このようなリレーショナルモデリングに慣れ親しむのに役立ちます。 – harandk
こんにちは。情報モデリングとリレーショナルデータベース設計に関する入門書を読む必要があります。これはあなたの質問が欲しいものですが、個別のチュートリアルの例ではありますが。どのように答えを正当化することができます - あなたが何も知らないときは、ゼロから説明し正当化しなければなりません。特定の仕様に関する特定のコードやデザインについて特定の質問がある場合は、質問してください。 – philipxy