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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

MariaDB

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

Q&A

解決済

2回答

693閲覧

スタンプラリーのデータベース・テーブル構成

BlueBits

総合スコア57

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

MariaDB

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

0グッド

1クリップ

投稿2018/03/10 03:49

編集2018/03/10 07:24

お世話になります。

スタンプラリー向けのデータベース構成を現在学習しています。

目的
・ユーザが取得したスタンプの取得状況をサーバで管理
・スタンプ取得直後に、取得状況に応じてアクション

内容
・スタンプの箇所は増減
・スタンプの箇所に同一ユーザの重複の許可(回数)
・スタンプラリーの期間は無期限
・ユーザを認識するため個別にID

課題
取得直後にアクションするため、処理の負荷を軽減したい

このような状況で一般的に最適なデータベースのテーブル構成
はどのような構成が考えられますでしょうか。

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

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

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

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

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

bassbone

2018/03/10 04:46

「・スタンプの箇所に同一ユーザの重複の許可(回数)」とありますが、通常それぞれのスタンプは1人1回しか押せないという感じに対して違和感がありますが、正しい仕様でしょうか?
BlueBits

2018/03/10 05:20 編集

おっしゃる通り基本的に1回のみになります。今後拡張していく際に周回・スタンプラリー機能を持ちつつ他の追加機能を・・・という状況が容易に考えられるため今のうちに対応できればというとこです。
bassbone

2018/03/10 05:23

了解しました。
guest

回答2

0

データモデルとしては以下のように考えられるかと。

マスター:
・ユーザー(ID,ユーザー名)
・スタンプラリー(ID,ラリー名)
・スタンプ場所(ID,スタンプラリー.ID,スタンプ場所名)

トランザクション:
・スタンプラリー参加者(スタンプラリー.ID,ユーザー.ID)
・スタンプ履歴(スタンプ場所.ID,ユーザー.ID, スタンプ日時)

※スタンプ履歴は重複云々を考えるより素直に日時で追加する方が良いかと思います。

投稿2018/03/11 12:24

sazi

総合スコア25138

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

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

BlueBits

2018/03/12 00:54

ありがとうございます。概ね先に回答頂いた方と同じ構成で今回想定している構成で安心して進めれそうです。大変恐縮ですが先に回答頂いた方をベストアンサーと致します事ご了承ください。
guest

0

ベストアンサー

スタンプラリーシステムの設計をしたことがないので、あくまでも参考までですが、、、
まずは以下のようなテーブル定義をたたきとして、依頼者とヒアリングしながら設計をすすめていくかと。(太字:PK)

  • スタンプラリー

スタンプラリーID、スタンプラリー名

  • スタンプ

スタンプラリーID、スタンプ番号、無効フラグ

  • ユーザ

ユーザID、ユーザ名

  • スタンプ獲得履歴

⇒スタンプラリーID、スタンプ番号、ユーザID、スタンプ獲得日時

「取得直後にアクションするため、処理の負荷を軽減したい」とありますが、取得から処理までどの程度のタイムラグが許容されるかで設計は変わってくるかと思います。

投稿2018/03/10 05:39

編集2018/03/10 07:03
bassbone

総合スコア767

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

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

BlueBits

2018/03/10 06:57

ありがとうございます。ご確認なのですが押印履歴から獲得状況の把握ということでよろしいのでしょうか? アクションに関しては全体的に1秒以内であればと考えています。
bassbone

2018/03/10 07:06

はい、そうです。紛らわしかったので押印履歴から獲得履歴にテーブル名を変更しました。あと改めて質問本文を読み返したのですが、取得と獲得という用語が混在していますが、同じ意味であればどちらかに統一したほうがいいです。昔、自分の尊敬するエンジニアの方に「用語の統一は重要」と教わったので。
bassbone

2018/03/10 07:07

1秒以内というのはアクションの内容によっては実現が困難になる場合もありえます。アクションとは具体的にどのようなことを想定されているのかを質問本文に記載されるといいかと思います。
BlueBits

2018/03/10 07:37

ありがとうございます。独学で進めてきたため今回のデータベース構成にあたり、ご回答頂いた構成の想定はしたもののふっと履歴の肥大化を考えると、もっと適切な方法があるのでは?(スタンプごとに列追加など、KVS方式など)と不安になり第三者にお聞きしようと思いご質問いたしました。 アクションは実はまだ全く決まっていません。回答が曖昧ですみません、目標程度とお考えいただけたらと思います。
bassbone

2018/03/10 07:47

了解しました。データベース設計はかなり奥が深いので、私もまだ修行中です。。。上記コメントの通り、私の回答はあくまでもRDBMSを使う想定ですが、KVSを使うのであればまた違った設計になるかもしれません。他の方からの回答も待ってみるといいかと思います。
BlueBits

2018/03/10 08:14

承知いたしました。少々お時間をいただいて回答がなければ、こちらで回答を締め切らせていただきます。 独学で周りに検討する人もいなかったので助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問