現在SNSを作っていてデータベースについて疑問点があったので質問します。
使用言語:PHP
データベース:MySQL
①プログラム上(PHP)でテーブルを作成してもいいんでしょうか?
例)mysqli_query($link, "CREATE TABLE dm_ユーザーID ()・・・");
②1つのプログラムで複数のデータベースからデータを取ってきてもセキュリティ的には大丈夫なのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
要件次第ですけど、先ずは正規化に照らしてからだと思います。
SNSでのユーザー毎にテーブルのセットを持たせるというのは正規化されているとは言いませんので。
投稿2022/07/26 00:35
総合スコア25195
0
MySQL詳しくないので、雑多に書いてしまうけれどご容赦を。
SNSってさぁ、いろんなサービスが世の中にあるけど、具体的にどういうことを実現するSNSを作る前提なのかなぁ。
画像や音声や動画などのために別途声質の違うデータベースを組み合わせる(むしろストレージサービスとも言うけれど)こともあるけれど、質問文からは汲み取れないなぁ。
SNSに限らずシステム運用中にテーブルが作られ増えていくのって、
果たして効率の良いデータ取得データ抽出ができるものなのかなぁ。
ユーザー単位でテーブルを分けちゃうと、
ユーザーを横断したデータ抽出のために工夫が必要になるよねぇ。
たぶん面倒になるよ、できなくはないけれど。
実現させたい機能に沿ったデータ構造を考えなきゃいけないんだけど、
クエリーを実行するたびにユーザーごとに作ったテーブルをJOINしていくのってどうなのかなぁ。
テーブルを作るたびにビューを定義し直す手もなくもないけど、それって運用中でも大丈夫なのかなぁ。
テーブルを作ったあと適切にインデックスも施さないといけなくなるけど、
EXPLAIN 文でクエリー実行計画とかチェックして効率の良い方法を検討したらいいと思うよ。
私なら運用中にデータ構造が変わらないように、運用中にテーブルが雪だるま式に増えていく構造は絶対取らないけどね。
プリペアドステートメントとバインドパラメータを駆使して、
同じカタチのクエリーをクエリ返し実行する時、
データベースのリソースの使い方が上手になっていくものだと思っているのだけど、
ユーザーごとに分けたテーブルのデータを取得するためにいつも違うテーブルにアクセスするのは、
それなりに負担になるものと思うなぁ。
複数のデータベースっていうのは、単にテーブルのことなのか、データベースインスタンスのことなのか。
複数のインスタンスからのデータ取得ってそれだけで余計に負担がかかるけど、
どういう規模感のものを作ろうとしてるんだろうね。
複数のインスタンスを使うのって、企業の基幹システムなんかで別のシステムのデータを連携するときなんかに使う手段だけど、
たかだかSNSでどこまでよそのデータベースを利用する場面があって、
直接SNS側から更新を掛ける必要があるのかとか質問文から汲み取れないからよくわからないなぁ。
他システムとの連携だって、データベースを直接つなぐ以外にも、
webapi越しにアクセスする手段があるわけで、
本当に別インスタンスと繋ぐ必要があるのかを考えてみてほしい。
セキュリティのことを配慮するのも大事だけど、
そもそもユーザー数何人規模で、一日の投稿数が何千件何万件で、どういう機能を実現するのかの
具体的な数字が出てないからぼやけてくるんだよね。
いわゆる要件定義が足りない。
設計ってただデータ構造を考えるだけじゃなく、運用ベースでの実際のオーダーのデータが正しく扱えるかの評価も加わってくるよ。
ダミーデータでいいから実際にデータを作ってみて、クエリー組んでみて、実行計画の評価をして改善を図っていく、
ってことをしないなら、とりあえず組んでみたらいいよ。思うように。
システム運用中にテーブルが増えても困らない設計もあるかもしれないし。
最後に、設計の仕方の解説記事をいくつか置いておく。
データベース(RDB)設計の進め方! - Qiita
投稿2022/07/26 01:14
編集2022/07/26 01:19退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
プログラム上(PHP)でテーブルを作成してもいいんでしょうか?
クライアントにテーブルを作らせるのは事実上無理でしょうね
クライアントに高いスキルを要求することになりますので。
管理者としてDB/テーブルの作成をプログラムから行うことは可能ですが
phpMyAdminのようなツールでの管理が必要十分だと思います
1つのプログラムで複数のデータベースからデータを取ってきてもセキュリティ的には大丈夫なのでしょうか?
アクセス権を考えるとテーブル間の参照は同じDB内が望ましいです
ただ分けるメリットもあるので一概にNGだと決めつけるのは早計です
投稿2022/07/26 00:32
総合スコア114839
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
①プログラム上(PHP)でテーブルを作成してもいいんでしょうか?
要件次第です。
どういう用途なのか。
もしアクセス毎なら not existsをつければいいといえばいいですが、
既に作られていたら無駄なDBアクセスなので意味はないです。
何かの作成時(サイトそのものとか管理機能的にあるもの)に一度だけ作られるとかならあるでしょう。
②1つのプログラムで複数のデータベースからデータを取ってきてもセキュリティ的には大丈夫なのでしょうか?
そのような構成ではなく実装に問題があることが常なので、
データベースが複数かどうかはセキュリティ観点にはなりにくいと思います。
いずれにしても要件次第で、現在出ている情報から確実に言えることはほぼないです。
投稿2022/07/25 22:41
総合スコア80850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。