- ベストアンサー
正規化について
こんばんは。お世話になっております。 現在、テーブルの設計を考えているのですが、「正規化」に関してアドバイスを頂ければと思い、投函させて頂きました。 例えば、ログイン情報に関する、id,mail,passwd,name1,name2,address,category などといった項目を格納させたいと思っているのですが、正規化を調べていると、更に細分化して登録させるべき・・などといった事が書かれていました。 当然、分散させるとスクリプト的にバグを誘発する可能性も出てくるかと思うのですが、データを参照する際、複数のテーブルに接続する負荷?を踏まえ、今回のような個人情報に関するものでも、分散して登録した方が良いのでしょうか? 有識者の貴重なご意見を頂戴出来れば幸いです。 お忙しい中恐縮ですが、宜しくお願い申し上げます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
全ての項目が1対1で対応し、出力の際も全ての項目を 参照する可能性が高いのであれば、別テーブルにデータを持つ 有効性はほとんどないでしょう。 逆に、抜けデータがおおかったり、ケースによって出力される データが別だったり、極端におおきなデータを格納するフィールドが あったりするのであれば、きちんとテーブルわけをした方がよいでしょう。 ソースをうまく管理しているのであれば、すこしデータがたまった 時点で高速化をするために複数項目のあるテーブルを分割したり することもできるので、特に問題がなければある程度まとまった 単位でデータを管理した方が効率的だとおもいます。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>メンバー情報として1ページに表示させるデータ システム内の重複情報を極力減らし、複数表からデータを持ってくることを容易に実現できるのがRDBMSの長所です。出力結果に対応させるように表を設計するというなら、そもそもRDBMSにする必要があるのでしょうか? >最低限のメンバーの基本情報を1つのテーブルに登録しようと ID、氏名、カテゴリなどの関係が、常に1:1が保たれるのかどうかが分からないと、単一表でいいとか、複数表に分けるべきといったアドバイスはできません。 すぐに思いつくだけでも、以下のような事項が不明です。 (1)同じIDで、複数のメールアドレスの登録は許すか否か? (2)同じ人による複数のID取得を許すか否か? (3)同一人物か否かを判断するための情報は、今の情報だけで十分か? (4)一つのIDでは、一つのカテゴリしか登録を許さないのか?
お礼
chukenkenkou様 はじめまして、こんばんは。 私の設定の場合、と言う意味で正規化の基準をアドバイス頂きたく思っていましたが、初心者故にかそれが言葉足らずを招いてしまったようです。 考え方の基準となる説明をいただき、とても参考になりました。 今後の参考にさせて頂きます。有難う御座いました。
- chukenkenkou
- ベストアンサー率43% (833/1926)
使われている用語が分かりにくい(別の意味でよく使われる用語を使っている)し、あなたの意図が質問内容から不明確な点が多いのですが? >例えば、ログイン情報に関する、id,mail,passwd,name1,name2,address,category などといった項目 各列には、何を格納しようと考えているのでしょうか? id,mail,passwdくらいなら想像もできますが、name1とname2があったりcategoryなど、あなたの意図をこの文章から読み取るのは容易ではありません。 >正規化を調べていると、更に細分化して登録させるべき・ 細分化? 別表に分けるという話ではなく、各情報を更に細分化させるのですか? >当然、分散させるとスクリプト的にバグを誘発する可能性も出てくるかと 分散とは、今想定している各列を、別の表に分けるという意味で使っていますか? 複数表に分けると、バグが誘発されるのですか? 重複情報を極力持たず、特定の結果を得るために参照すべき表が明確になるので、バグは少なくなりませんか?
お礼
chukenkenkouさま はじめまして、こんばんは。 私の文章がおかしかったようで申し訳ありません。 id,mail...など、上記に示したカラムで構成されているテーブルは、メンバー情報として1ページに表示させるデータ、かつ最低限のメンバーの基本情報を1つのテーブルに登録しようと記載したものです。(現在のテーブルは上記の通り) ただ正規化を考えた場合、もっと分散すべきなのかな?と・・。 しかしながら表示させたいデータが、いくつかのテーブルに分散されて登録していると、初心者故にか、サーバー?に負担が掛かるのでは?とか、バグを誘発しやすくなる?とか思え、皆さまの貴重な考え方の基準?みないなものを伺う事が出来ればと思っての投函でした。 name1,name2 は、性、名であり、categoryはその個人の基本情報として、登録するサイト内のカテゴリを選んでもらうために設けたものです。
お礼
yambejp様 こんばんは。いつもお世話になっております。 初心者の身にとって、イメージが沸く沸く説明を有難う御座います。 先の回答者様のご意見も含め、とても参考になりました。 有難う御座いました。