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

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

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

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

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

PHP

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

データベース

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

データベース設計

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

Q&A

解決済

3回答

2134閲覧

Webアプリケーションの不確定データのDB格納

1nakaji

総合スコア187

MySQL

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

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

PHP

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

データベース

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

データベース設計

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

0グッド

1クリップ

投稿2015/10/22 14:09

現在、ユーザー登録をしてログインして利用する
Webアプリケーションを開発しています。

言語はPHPです。

ユーザー登録時にメールアドレス(ログインID)と
パスワード以外に年齢や性別などの情報も取得します。

通常はMySQLで性別や年齢のカラムを作成して使うかと思いますが、
この項目が不確定でカラムを決めることが難しいです。
(内容、数ともに変更になる可能性が有ります)

このような不確定なデータをどのようにしてデータを格納するのが、
保守しやすく制御しやすいでしょうか。

例えば、ひとつのカラムの中に
key=>valueの組み合わせで格納しておくとかも考えたのですが、
実際どうなんでしょうか。

メールアドレスやパスワードはMySQLに、
その他の不確定なデータをMongoDBに格納することも考えたのですが、
このためだけにMongoDBを使うのは効率悪い気がしまして・・・。

MySQLとMongoDBということになれば、
JOINなども使えないかと思いますので、
データ取得が煩雑になると思いまして。

このような場合、
他の方々はどのように対応されているのでしょうか?

ご意見などがあれば教えていただけますと幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

質問内容の「不確定なデータ」を扱っている有名なものとしては、wordpress の設計が役に立つかと思います。

基本情報

sql

1CREATE TABLE `wp_users` ( 2 `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 3 `user_login` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 4 `user_pass` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 5 `user_nicename` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 6 `user_email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 7 `user_url` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 8 `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 9 `user_activation_key` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 10 `user_status` int(11) NOT NULL DEFAULT '0', 11 `display_name` varchar(250) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', 12 PRIMARY KEY (`ID`), 13 KEY `user_login_key` (`user_login`), 14 KEY `user_nicename` (`user_nicename`) 15) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

追加情報

sql

1CREATE TABLE `wp_usermeta` ( 2 `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 3 `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', 4 `meta_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 5 `meta_value` longtext COLLATE utf8mb4_unicode_ci, 6 PRIMARY KEY (`umeta_id`), 7 KEY `user_id` (`user_id`), 8 KEY `meta_key` (`meta_key`(191)) 9) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

投稿2015/10/22 16:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

1nakaji

2015/10/22 18:40

ご回答ありがとうございます。 ログインIDなどのユーザー情報と別のテーブルにして、 keyとvalueを別カラムで格納していくわけですか。 たしかにこれならkeyの数が変わったとしても 対応ができそうですね。 このやり方は参考になりますね。 こちらでいけそうか検討してみます。 ありがとうございます。
guest

0

あまり複数のDBをひとつのシステムに使うって聞いたことないです。
性別といったカラムが必要かどうかわからないならば、カラムが必要と確定してからALTER TABLEで追加すればいいと思います。

投稿2015/10/22 15:59

tixure55

総合スコア400

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

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

0

不確定な要素というのがどんなシーンなのかわかりませんが、
不確定要素をMYSQLの別テーブルで管理すれば良いのはないでしょうか。

一般的にECサイトの様なもので考えるとわかり易いと思います。

例えばユーザの登録情報を格納しているユーザテーブルと
そのユーザが注文したデータ(不確定要素)を格納する注文テーブル。

必要に応じて結合して取り出せばよいと思います。

ユーザテーブル

id 氏名 性別 年齢
1 Aさん 男 30歳
2 Bさん 男 30歳

注文テーブル
id 発注日 商品名 数量
1 2015/10/21 大根 1
1 2015/10/21 にんじん 2
1 2015/10/21 じゃがいも 1
1 2015/10/22 大根 1
1 2015/10/22 にんじん 2
2 2015/10/22 じゃがいも 1

select * from ユーザテーブル u,注文テーブル c where u.id=c.id and m.id=1
とか
select * from ユーザテーブル u inner join 注文テーブル c where u.id=c.id and m.id=1
とか。

投稿2015/10/22 15:18

Qoo

総合スコア1249

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

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

1nakaji

2015/10/22 15:53

ご回答ありがとうございます。 >不確定な要素というのがどんなシーンなのかわかりませんが、 >不確定要素をMYSQLの別テーブルで管理すれば良いのはないでしょうか。 こちら上記でも簡単に書かせていただいたのですが、 ユーザー登録時に必要になる年齢や性別などの情報ですね。 いまは年齢、性別、秘密の質問などを取得していますが、 これが不要になったり項目が変わる可能性があります。 >id 氏名 性別 年齢 > 1 Aさん 男 30歳 > 2 Bさん 男 30歳 なので、運用している間に、この性別や年齢が不要になったり、 秘密の答えや住所が必要になる可能性があるということです。 注文情報などであれば教えていただいた方法がベストと思いますが、 ユーザー情報だとどうなんだろうと思いまして。 状況は伝わりますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問