- ベストアンサー
DBの正規化に関する質問です。
例えば、 下記のキー群(日本の義務教育の学校に関するテーブル)が揃っている場合にも、 更なる正規化が可能になっていますでしょうか? (1)年度(2)学校名(3)学年(4)クラス(5)性別(6)出席番号(7)氏名 ★次のURLのページを閲覧しました際に、此の質問に私は思い至りました。 http://ja.wikipedia.org/wiki/%E4%B8%BB%E3%82%AD%E3%83%BC
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「キー群」という用語をどの様な意味で使われているのでしょうか? 1つのテーブルの主キーとなる属性でしょうか?それともテーブルの全ての属性を書かれたのでしょうか? 問題のテーブルの全属性とその中で主キーが何か分かる様な形で書いて頂けると問題が明確になると思います。 仮に、提示されている項目が1つのテーブルの全属性を羅列したもので、全てが主キーだとして考えます。 なお、純粋に正規化の問題と捉えて、新たな項目(属性)の導入は考えない事にします。 一般的な学校の仕組みからすると、関数従属性が有るものだと考えられるでしょう。 (普通、年度, 学校名, 学年, クラス, 出席番号が分かればそれが誰か分かりますし、出席番号が男女別の連番になっている事も無いでしょうから) { 年度, 学校名, 学年, クラス, 出席番号 } → 氏名 { 年度, 学校名, 学年, クラス, 出席番号 } → 性別 従って、全部の属性が主キーだとすると、部分関数従属が存在することになり、第2正規形になっていません。 これを解消するには、主キーを (年度, 学校名, 学年, クラス, 出席番号) する必要が有ります。 こうすれば第5正規形の条件まで満たされる形になると思います。 ただし、同姓同名は無い、男女で同じ名前になることは有り得ないなどと仮定するなら、下記の様な関数従属性も考えられ、さらなる正規化もできると言えますが、これらの仮定はちょっと強引過ぎる気がします。 { 氏名 } → 性別 { 氏名 } → 年度, 学校名, 学年, クラス, 出席番号 http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0%E5%BE%93%E5%B1%9E%E6%80%A7 http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%AD%A3%E8%A6%8F%E5%8C%96
その他の回答 (1)
- jjon-com
- ベストアンサー率61% (1599/2592)
可能です。 データベースの正規化について学習すれば,次のことが理解できるでしょう。 ・学校は学校コードによって一意に識別する ・学生は学生コードによって一意に識別する
お礼
私の盲点が見付かりました。 学生コードは実用化されていないと思われますが、 そもそも、当該学校の諸属性を関数従属させる為には、 学校コードの採用が必要でしたね。 因みに、下記URLのページでも、御指導を賜れませんでしょうか? http://okwave.jp/qa/q7679891.html
補足
有り難う御座います。 たとえ主キーのコードと対応した項目の個数が1つに限られていましょうとも、其処だけの更新の可能性さえもが有り得ますので、 それ等のコードの追加が望ましいのですね。
お礼
別のページ( http://okwave.jp/qa/q7653663.html )でも、 御教授を賜れませんでしょうか?
補足
有り難う御座います。 逆に氏名を主キーにする、という見方には気付いていませんでした。