次の課題を解く。 下記の表がある。一行(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年版、天文の部に記載されているものを使用した。
まりんきょ学問所 > コンピュータの部屋 > 表計算ソフトの部屋 > 第一正規形への正規化