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

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

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

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

PHP

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

Q&A

4回答

134閲覧

レコード変更時のデータの扱い方

takeke

総合スコア60

MySQL

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

PHP

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

0グッド

0クリップ

投稿2018/10/25 23:13

データ変更に伴うレコードの扱い方をどのようにしたらいいか判断がつかないので質問させていただきます。

テーブルがuser(以下U),schedule(以下S),user_scuedule(以下US)と3つあり、USは中間テーブルので、持っているのはUS_id(主キー),U_id,S_idの3つです。UとSはそれぞれお互いのデータは持っていません。USテーブルの1つのレコードにはUS_id,U_id,S_idがそれぞれ1つあり、1対1対1になります。
1つのSに複数のUが参加する場合USテーブルのレコードは
US_1,U_1,S_1
US_2,U_2,S_1
US_3,U_3,S_1

という感じなっています。

登録の際はフォームのPOSTにSとU_idのデータがあり、SのデータをSにINSERTして、発行されたS_idとPOSTのU_idをUSにINSERTしています。

このような場合、データ変更、削除の場合、USテーブルのデータはどのようにしたらいいでしょうか?
削除の場合
Sが削除された場合はUSの中から削除されたSのS_idと一致するUS_idを削除。
Uが削除された場合はUSの中から削除されたUのU_idと一致するUS_idを削除。

変更の場合
SやU自体が変更された場合はそのまま何もしない。
Sに参加するUに変更ある場合は、そのS_idを持つUS_idを削除して、変更後のデータをUSにINSERT(新たに別のUS_idが発行される)。

と今思いつく限り書きましたが、このような感じになりますでしょうか?アドバイスなどよろしくお願いいたしますm(_ _)m

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

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

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

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

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

guest

回答4

0

中間テーブルへのデータ登録 にかなりの回答が載っています。それを放置して新しく質問するのは止めましょう。

削除の場合

Sが削除された場合はUSの中から削除されたSのS_idと一致するUS_idを削除。
Uが削除された場合はUSの中から削除されたUのU_idと一致するUS_idを削除。

yambejpさんの回答の「まとめ」のCREATE TABLEに親テーブルをDELETEしたら子テーブルも自動的にDELETEしてくる記述が載っています。CREATE TABLE, INSERT を実行してデータを用意し、親テーブルを1行DELETEして動作確認しましたか?

foreign key(sid) references schedule(sid) on delete cascade,

foreign key(uid) references user(uid) on delete cascade,

投稿2018/10/26 05:21

Orlofsky

総合スコア16415

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

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

0

原則マスターデータを削除するということはないというのが回答。
ユーザーが抜けたりスケジュールが終わったりしても
usは中間テーブルでありログでもあるので、履歴は残しておいてかまわないし
逆に生きているレコードだけ残しておくとしてusをいじったとして
sやuに影響することはない

また変更については、そもそもがuidやsidが変更する運用はしてはいけない

ということで、やらないほうがいい前提を理解した上で
上記2点についてどうしてもやりたい場合、

  • uやsのレコードが削除された場合usの該当レコードを削除したい

 →usのuidやsidのカラムに外部キーを設定する

  • uでuid、sでsidが変更されたらusの該当idも変更する

 →uやsにtriggerを設定しておく

投稿2018/10/26 00:37

yambejp

総合スコア114843

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

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

0

データ変更、削除の場合、USテーブルのデータはどのようにしたらいいでしょうか?

USテーブルは追加と削除でいいんじゃないでしょうか。

Sに参加するUに変更ある場合は、そのS_idを持つUS_idを削除して、変更後のデータをUSにINSERT(新たに別のUS_idが発行される)。

履歴を作るイメージだとしたら、そんなの必要ですか?

もし更新があるとしたら、USテーブルにSへの参加日時みたいなのを項目として持つなら、有りだとは思いますけど。

投稿2018/10/26 00:34

sazi

総合スコア25195

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

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

0

仕様次第かと。

そもそも S や U の削除も、物理削除がよいか?論理削除にすべきか?と言った話も出ると思います。

投稿2018/10/26 00:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問