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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

3回答

706閲覧

MySQL nullの場合の親子関係がわからない

cacao86

総合スコア97

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2020/03/06 09:35

編集2020/03/09 01:05

現在id,name,subject,bodyを持ったtestテーブルがあるのですが、
そこに以下のフィールドを追加するよう課題が出たのですが
完成形がイメージできずどうやってはじめたらいいのか分かりません。
特にparent_idで、説明の部分もですが
「parent_idはレコードに親子の関係性を持たせることを意図しており、parent_idがnullは親レコード、nullでない場合は親のidが入っている想定です。」と、言われてて理解ができずに困っっています。

フィールド名 型 説明
parent_id int型 親のid。子レコードの場合はnull
post_user varchar(8) 投稿者名
created_at datetime not null 作成日時
updated_at datetime not null 更新日時
deleted_at datetime null 削除日。未削除はnull

完成形のイメージとフィールドの追加の仕方が分かる方がいらっしゃいましたらご教示お願いいたします。
現在のtestテーブルです↓

今のtestテーブル

フィールドの追加

フィールドの追加はできていると思うのですが、オプション設定がよく分かりませんでした。
parent_idがnullは親レコード、nullでない場合は親のidというのはどうすれば設定できるのでしょうか?

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

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

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

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

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

amura

2020/03/08 00:56

「parent_idはレコードに親子の関係性を持たせることを意図しており、parent_idがnullは親レコード、nullでない場合は親のidが入っている想定です。」であれば  parent_id int型 親のid。子レコードの場合はnull の部分、「親レコードの場合はnull」ではないでしょうか?
guest

回答3

0

回答は出ているのでご参考です

sql

1CREATE TABLE t_test(id int not null primary key, 2 name varchar(50), 3 subject varchar(50), 4 body text); 5 6#追加項目とfkeyを付けてみる 7ALTER TABLE t_test ADD ( 8parent_id int, 9FOREIGN KEY (parent_id) REFERENCES t_test(id), 10post_user varchar(8), 11created_at datetime not null, 12updated_at datetime not null, 13deleted_at datetime null); 14 15#試しに2は1に、4,5は3を親にしてみる。 16INSERT INTO t_test VALUES 17(1,'三村','青森','ありがとうごす',NULL,'hoge',now(),now(),NULL), 18(2,'西脇','京都','おおきに',1,'hoge',now(),now(),NULL), 19(3,'中村','長崎','ありがとうござす',NULL,'hoge',now(),now(),NULL), 20(4,'阿部','長野','おかたしけ',3,'hoge',now(),now(),NULL), 21(5,'玉城','沖縄','にふぇーでーびる',3,'hoge',now(),now(),NULL); 22 23 24#親はNULLで子は親idが無いとエラーになる 25INSERT INTO t_test VALUES 26(9,'西郷','鹿児島','ありがとさげもした',6,'hoge',now(),now(),NULL); 27

投稿2020/03/09 02:52

編集2020/03/09 06:26
amura

総合スコア333

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

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

sazi

2020/03/09 03:10 編集

親子だけなら良いですけど孫とかひ孫とかもあり得ると思うんですよね あ、いいのか。上位がいない場合ですもんね。
guest

0

ベストアンサー

サンプル的なデータがあれば分かり易いかと思います。
以下は項目を追加したイメージ

idparent_idpost_usernamesubjectbody
1Null001三村青森ありがとうごす
2Null002西脇京都おおきに
3Null003中村長崎ありがとうござす
4Null004阿部長野おかたしけ
5Null005玉城沖縄にふぇーでーびる

上記に、ID=1にぶら下がりでpost_user=006の人が投稿したイメージが以下です。

idparent_idpost_usernamesubjectbody
1Null001三村青森ありがとうごす
61006アレンUSAサンキュー
2Null002西脇京都おおきに
3Null003中村長崎ありがとうござす
4Null004阿部長野おかたしけ
5Null005玉城沖縄にふぇーでーびる

投稿2020/03/06 10:16

編集2020/03/06 10:17
sazi

総合スコア25327

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

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

cacao86

2020/03/08 04:16

例まで添えての丁寧な説明ありがとうございます。 おかげで課題文の内容が理解することができました。 ですが、ぶら下がりの関係を作るにはどういったコマンドを打てばいいのか調べても分かりませんでした。 alter table t_test add (parent_id int, post_user varchar(8), created_at datetime not null, updated_at datetime not null, deleted_at datetime null); こう打ったのですが合っている気がせず、分かるようでしたら教えていただけませんか?
javahack

2020/03/08 04:35

テーブルへのフィールドの追加とデータ設定は分けて考えた方が良いのではないでしょうか。 現在のtestテーブルのデータでは親子関係は分からないので、テーブル作成後に親子関係のツリー構造の情報を追加でもらってから設定するのでは。
cacao86

2020/03/09 01:03

フィールドの追加はできていると思うのですが、オプション設定がよく分かりませんでした。 parent_idがnullは親レコード、nullでない場合は親のidというのはどうすれば設定できるのでしょうか?
sazi

2020/03/09 01:19 編集

そんな設定はありません。 レコードの追加時に親子を意識してparent_idを設定します。 取得時も同様に親子を意識して取得します。
cacao86

2020/03/09 01:27

そうだったのですね。 私が無知故にお恥ずかしい質問をしてしまい、失礼いたしました。 ありがとうございます。
guest

0

parent_id int型 親のid。子レコードの場合はnull

これは木構造などによく使われる手法ですね
親子関係をもっていないデータで構成されたテーブルに
あとから親子といわれてもピンとこないでしょうね・・・

投稿2020/03/06 09:38

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問