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

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

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

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

5回答

1075閲覧

データベースの疑問点

sipmga30

総合スコア0

MySQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2022/07/25 17:34

編集2022/07/25 17:35

現在SNSを作っていてデータベースについて疑問点があったので質問します。

使用言語:PHP
データベース:MySQL

①プログラム上(PHP)でテーブルを作成してもいいんでしょうか?

例)mysqli_query($link, "CREATE TABLE dm_ユーザーID ()・・・");

②1つのプログラムで複数のデータベースからデータを取ってきてもセキュリティ的には大丈夫なのでしょうか?

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

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

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

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

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

guest

回答5

0

要件次第ですけど、先ずは正規化に照らしてからだと思います。
SNSでのユーザー毎にテーブルのセットを持たせるというのは正規化されているとは言いませんので。

投稿2022/07/26 00:35

sazi

総合スコア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

yambejp

総合スコア114839

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

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

0

①プログラム上(PHP)でテーブルを作成してもいいんでしょうか?

要件次第です。
どういう用途なのか。
もしアクセス毎なら not existsをつければいいといえばいいですが、
既に作られていたら無駄なDBアクセスなので意味はないです。
何かの作成時(サイトそのものとか管理機能的にあるもの)に一度だけ作られるとかならあるでしょう。

②1つのプログラムで複数のデータベースからデータを取ってきてもセキュリティ的には大丈夫なのでしょうか?

そのような構成ではなく実装に問題があることが常なので、
データベースが複数かどうかはセキュリティ観点にはなりにくいと思います。

いずれにしても要件次第で、現在出ている情報から確実に言えることはほぼないです。

投稿2022/07/25 22:41

m.ts10806

総合スコア80850

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

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

0

1. 作成したかったらしてもいいけどリクエストある毎に毎回テーブル作成するの?
2. 複数のデータベースだからセキュリティ的にどうってあんまり関係ないかな?単一でもダメなものはダメ

投稿2022/07/25 22:23

RiaFeed

総合スコア2701

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問