第一正規形への正規化 |
作成日: 2015-05-03 最終更新日: |
次の課題を解く。 下記の表がある。一行(1レコード)につき、B 列にはキーが、C 列から F 列までは非正規化状態でセルに非キーが入力されている。 これを第一正規形に正規化するにはどのようにすればよいか。 ここで、A 列は空欄であること、 少なくとも B 列 と C 列にはセルに値が入力されていること、 また C 列から F 列までは非キー値が左詰めで入力されていることは保証されているものとする。 なお、表は Excel で作られているものとする。また、表は太陽系に属する主な惑星と、その惑星に対する主な衛星である。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 地球 | 月 | ||||
2 | 火星 | フォボス | ダイモス | |||
3 | 木星 | ガニメデ | カリスト | イオ | エウロパ |
いくつかの方法を順序立てて組み合わせる。
まず、A 列にシリアル値を入力する。A1 セルに 1 を、A2 セルに 2 を入れて A1:A2 を選択し、右下のフィルハンドルをダブルクリックすれば、 自動的に最終行まで連続したシリアル値が入力されるだろう。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 1 | 地球 | 月 | |||
2 | 2 | 火星 | フォボス | ダイモス | ||
3 | 3 | 木星 | ガニメデ | カリスト | イオ | エウロパ |
今度は空白レコードを作成する。 第 1 行から第 3 行までの A列の 1 から 3 までをコピーし、その下に3回ペーストする。 この 3 という数字は、繰り返し項目の最大値(ここではガニメデ、カリスト、イオ、エウロパの4)から1だけ差し引いた値である。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 1 | 地球 | 月 | |||
2 | 2 | 火星 | フォボス | ダイモス | ||
3 | 3 | 木星 | ガニメデ | カリスト | イオ | エウロパ |
4 | 1 | |||||
5 | 2 | |||||
6 | 3 | |||||
7 | 1 | |||||
8 | 2 | |||||
9 | 3 | |||||
10 | 1 | |||||
11 | 2 | |||||
12 | 3 |
次に、A 列にあるシリアル値を昇順に並び替える。この結果により、1 レコードの下に繰り返し項目数 - 1 だけの空白レコードが用意される。 前項でわざわざ空白行を用意したのはこのためである。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 1 | 地球 | 月 | |||
2 | 1 | |||||
3 | 1 | |||||
4 | 1 | |||||
5 | 2 | 火星 | フォボス | ダイモス | ||
6 | 2 | |||||
7 | 2 | |||||
8 | 2 | |||||
9 | 3 | 木星 | ガニメデ | カリスト | イオ | エウロパ |
10 | 3 | |||||
11 | 3 | |||||
12 | 3 |
次に、B2 セルに =B1 と記述する。この結果、B2 セルは地球
と表示される。
この B2 セルをコピーした状態で、B3 セルからB12 セルを選択状態にし、選択オプションを選ぶ。
このオプションで[空白セル]を選び、空白セルだけ活性化されたことを確認して、[貼り付け]を選ぶ。 すると、非キーの最大繰り返し数がキーになっていることがわかる。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 1 | 地球 | 月 | |||
2 | 1 | 地球 | ||||
3 | 1 | 地球 | ||||
4 | 1 | 地球 | ||||
5 | 2 | 火星 | フォボス | ダイモス | ||
6 | 2 | 火星 | ||||
7 | 2 | 火星 | ||||
8 | 2 | 火星 | ||||
9 | 3 | 木星 | ガニメデ | カリスト | イオ | エウロパ |
10 | 3 | 木星 | ||||
11 | 3 | 木星 | ||||
12 | 3 | 木星 |
最後に、C2 セルに = D1 と記述する。この結果、C2 セルは0
と表示される
(仮に D1 に何か非主キーの値があれば、その値が表示される)。
この C2 セルをコピーした状態で、C2 セルから E12 セルを選択状態にし、選択オプションを選ぶ。
このオプションで[空白セル]を選び、空白セルだけ活性化されたことを確認して、[貼り付け]を選ぶ。 すると、非主キーの繰り返し項目がC列に代表してあらわれていることがわかる。
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
1 | 1 | 地球 | 月 | |||
2 | 1 | 地球 | 0 | 0 | 0 | |
3 | 1 | 地球 | 0 | 0 | 0 | |
4 | 1 | 地球 | 0 | 0 | 0 | |
5 | 2 | 火星 | フォボス | ダイモス | 0 | |
6 | 2 | 火星 | ダイモス | 0 | 0 | |
7 | 2 | 火星 | 0 | 0 | 0 | |
8 | 2 | 火星 | 0 | 0 | 0 | |
9 | 3 | 木星 | ガニメデ | カリスト | イオ | エウロパ |
10 | 3 | 木星 | カリスト | イオ | エウロパ | |
11 | 3 | 木星 | イオ | エウロパ | 0 | |
12 | 3 | 木星 | エウロパ | 0 | 0 |
B 列 と C 列は値と式が混在しているので値だけにすべく、B1からC12までをコピーして「値として貼り付け」を行う。 そのあと、C 列のセルが 0 となっている行をフィルターなどで選んでこれを消去すれば、B 列とC 列で第1正規化された表ができる。 この状態であれば、A 列 や、 D 列、E 列、 F 列を削除しても問題ない。 ここでは A 列を残しておき、D 列から F 列を削除した表を最終の形として掲げる。
A | B | C | |
---|---|---|---|
1 | 1 | 地球 | 月 |
2 | 2 | 火星 | フォボス |
3 | 2 | 火星 | ダイモス |
4 | 3 | 木星 | ガニメデ |
5 | 3 | 木星 | カリスト |
6 | 3 | 木星 | イオ |
7 | 3 | 木星 | エウロパ |
次の課題を解く。 下記の表がある。 表 1 との違いは、非キーに従属データがついていることである。 一行(1レコード)につき、B 列にはキーが、C 列, D 列には衛星の名前とその衛星の公転周期 (単位:日)が入っている。 これを第一正規形に正規化するにはどのようにすればよいか。
A | B | C | D | E | F | G | H | I | J | |
---|---|---|---|---|---|---|---|---|---|---|
1 | 地球 | 月 | 27.3217 | |||||||
2 | 火星 | フォボス | 0.3189 | ダイモス | 1.2624 | |||||
3 | 木星 | ガニメデ | 7.1546 | カリスト | 16.6890 | イオ | 1.7691 | エウロパ | 3.5512 |
シリアル値の入力、空白レコードの作成、シリアル値による並び替え、 主キーを連続して埋める、までは変わらない。 次の「非主キーを連続して埋める」ところが変わる。
先の例では従属データがない状態だったので C2 セルに = D1 と記述したが、この場合は従属データが一つあるので C2 セルに = E1 と記述する (なお、従属データが二つあれば C2 セルへは = F1 と記述する)。 次に C2 セルから H12 セルを選択状態にし、選択オプションを選ぶ。 以下は同じである。これでうまくいく理由は考えてほしい。
この作業はマクロにできるような気がするが、確かめていない。
なお、惑星・衛星の数値は、理科年表平成27年版、天文の部に記載されているものを使用した。
まりんきょ学問所 > コンピュータの部屋 > 表計算ソフトの部屋 > 第一正規形への正規化