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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

5034閲覧

SQL | TABLE | 親子関係について

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

2クリップ

投稿2015/05/15 00:32

編集2015/05/15 12:42

現在仕事でなんとなくSQLを触っています。
使用できるコマンドは、INSERT,DESC,SELECT,JOINです。

SQLの仕組みで、以下疑問に思っています。

例)以下のTABLEが存在するとします。

-SAMPLE01
-COUNTRYID
-COUNTRYNAME
-SAMPLE02
-AREAID
-AREANAME
-COUNTRYID

この2つのTABLEでそれぞれ独立していると思うんですが、
JOINで連結してあげると、COUNTRYIDに対応しているCOUNTRYNAMEでAREAID,AREANAMEが出力されます。

---COUNTRYNAME---AREANAME---COUNTRYID---AREAID-----------
--- AMERICA ---NEWYORK --- 1 --- 1 -----------
--- AMERICA --- LOS --- 1 --- 2 -----------
--- JAPAN --- TOKYO --- 2 --- 3 -----------

・SQLの考え方として、IDで各TABLEの情報を連結する解釈でよろしいですか?
・TABLEを作成する際に、上記の例のように親子のような関係を設計するとしたらそれぞれ同じフィールドを(COUNTRYID)を設ける必要がありますか?

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓追加↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
ご回答有難うございます。

■SQLの設計をする際、まずTABLE同士の親子関係から考える必要がありますか?
■SNS等のサービスの場合、開発段階でTABLEをCreateしておきそれをユーザにつかってもらうイメージで大丈夫ですか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

大前提として、基本的にテーブルにはユニークなID列を持たせます。
連結対象になりうるテーブルはID列を追加しましょう。
(使用するRDBMSによって少し作法は異なるかもしれません)

tatsuyoshiさんの例ではSAMPLE02のAreaIdは使用されていませんが、AreaにもIdが存在していますね。
ユニークなIDを持たないのは1:1の子テーブルであるとか、そういう特別な場合です。

※SAMPLE01とSAMPLE02では少し分かりにくいので、SAMPLE01をCountryテーブル、SAMPLE02をAreaテーブルとして説明します

・SQLの考え方として、IDで各TABLEの情報を連結する解釈でよろしいですか?
そうです。基本IDで各TABLE同士を連結します。

・TABLEを作成する際に、上記の例のように親子のような関係を設計するとしたらそれぞれ同じフィールドを(COUNTRYID)を設ける必要がありますか?
少し違います。同じフィールドを持つのは子テーブルだけです。
CountryとAreaの例では、Countryが親でAreaが子です。このため、AreaはCountryIdを持ちますが、CountryはAreaIdを持ちません。
また、TABLE同士を直接連結せず、連結テーブルを使用する場合もあります。
利点は省略しますが、AreaテーブルとCountryテーブルを繋ぐ CountrysArea(CountryId, AreaId)テーブルを作り利用するイメージです。

投稿2015/05/15 02:33

編集2015/05/15 06:18
haru666

総合スコア1591

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

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

0

基本、IDで連結するのが良いですが、名前が同じ(COUNTRYID)とは限りません。
※ 型は合わせてくださいね。

例えば、以下の様にすることが多いです。

lang

1-COUNTRY 2 -ID 3 -NAME 4-AREA 5 -ID 6 -NAME 7 -COUNTRYID 8 9 10SELECT 11 c.NAME AS COUNTRYNAME 12 , a.NAME AS AREANAME 13 , c.ID AS COUNTRYID 14 , a.ID AS AREAID 15FROM COUNTRY c 16 INNER JOIN AREA a 17 ON c.ID = a.COUNTRYID

投稿2015/05/15 02:01

kantomi

総合スコア295

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問