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

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

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

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

データベース

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

Q&A

解決済

2回答

6376閲覧

データベース設計について相談です。次のような設計はどのように改善できますか?

jimyo

総合スコア243

MySQL

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

データベース

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

0グッド

0クリップ

投稿2015/12/31 13:48

まず、対象のシステムでは2種類のユーザがいます。

  • 管理者
  • ユーザ

管理者とユーザは基本アカウント情報を持っています。
(名前、メールアドレス、パスワードetc...)

管理者は基本アカウント情報に加えて自分の権限レベルというフィールドを持っています。
ユーザは基本アカウント情報に加えて自分が所属するグループ名というフィールドを持っています。

つまり、

管理者 = 基本アカウント情報 + X
ユーザ = 基本アカウント情報 + Y

という構成になっています。
いま、このモデルをデータベース上で表現したいのですが、自分が作った構成がきちんと正規化されていないように思われ(正規化の認識についてはかなり曖昧です……)、プログラムから扱うときに面倒です。

以下に私が構成したデータベースを書きます。


AccountInfo テーブル
フィールド

  • ID
  • Name
  • mail
  • password

Admin テーブル
フィールド

  • ID
  • AccountID
  • PermissionLevel

User テーブル
フィールド

  • ID
  • AccountID
  • Group

Admin、UserのAccountIDフィールドでそれぞれAccountInfoにひも付きます。
一つのAccountInfoが複数のAdminやUserと対応することはありません。
また、管理者、ユーザは複数います。

共通項は抜き出したほうが良いと思ってこのような構成にしたのですがどうでしょうか?

Admin、Userでそれぞれ重複する基本アカウント情報フィールドを保持したほうがいいでしょうか?

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

システムや人それぞれですが、そもそも正規化自体が必要ないと思われます。
件数が膨大な量であるなら別ですが、逆に正規化する弊害(管理者、非管理者とも、どちらも検索する場合に二度検索しなければならない)がありますね。

この様な場合、管理者か、非管理者のフラグフィールドを追加し、レベルとグループを別フィールドにしてあげれば問題ありませんよ。

投稿2015/12/31 18:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

管理者とユーザのアカウント情報が
「本質的には同じものであり、同一の管理が必要である」
であるのであれば現在の形でいいでしょうし、
例えば学校の先生と生徒のように
「氏名や住所などの共通項は存在するがそれはあくまで偶然であって、本質的に生徒と先生はアプリケーション上の扱いが違うものである」
のであれば、それぞれ別テーブルでそれぞれ共通項を持ち管理するのがモデル的に正しいと思いますよ。

投稿2015/12/31 14:44

tanat

総合スコア18709

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問