テーブル設計をする際に気をつけたいこと

テーブル設計を試みた際に、テーブルの構造をどうすれば良いのか不明確だったため、調べつつ4つのルールにまとめてみた。

テーブル設計のルール

ルール1

テーブルはある共通の属性を持ったモノの集合であること

表1はテーブルとはいえない。表2はテーブルといえる

表1 共通の属性を持たない

列1 列2 列3 列4
食べ物 刺し身 焼き肉 そば
佐藤さん 田中さん 福田さん 塩田さん
ボーナス ゲーム 旅行 温泉

表2 共通の属性を持つ

原子番号 元素記号 元素名
1 H 水素
2 He ヘリウム
3 Li リチウム

ルール2

レコードを1行に特定できる主キーが存在すること

表3は同性同名・同年齢・同じ性別の人の区別がつかない。表4は主キーにより特定することが可能

表3 主キーが存在しない

名前 年齢 性別
鈴木一郎 25
鈴木一郎 25
田中修 30

表4 主キー(社員ID)が存在する

社員ID 名前 年齢 性別
001 鈴木一郎 25
002 鈴木一郎 25
003 田中修 30

ルール3

1つのセルに複数の値が存在してはいけない

表5は1つのセルに複数の値が存在している。表5を表6と表7に分割することで、セルの値を1つにできる

表5 1つのセルに複数の値が存在している

社員ID 名前 年齢 性別 兄弟
001 鈴木一郎 25 次郎
002 鈴木一郎 25 悦子
003 田中修 30 聡, 小春

表6 社員

社員ID 名前 年齢 性別
001 鈴木一郎 25
002 鈴木一郎 25
003 田中修 30

表7 社員・兄弟

社員ID 兄弟番号 兄弟の名前
001 1 次郎
002 1 悦子
003 1
003 2 小春

ルール4 「推移関数従属」が存在しないこと

「推移関数従属」とは、主キーから見て2段階の関数従属が存在しているもの。

表8は「推移関数従属」が存在しており、新しく業界名を追加しようとしてもできない。表8を表9と表10に分割することで、「推移関数従属」を無くすことができる。

表8 2段階の関数(推移関数従属)が存在している

企業ID 企業名 業界コード 業界名
001 A商社 001 不動産
002 B株式会社 002 電力
003 C研究所 003 医療

表9 企業テーブル(推移関数従属が存在しない)

企業ID 企業名 業界コード
001 A商社 001
002 B株式会社 002
003 C研究所 003
004 Dテクノロジー 004

表10 業界テーブル(推移関数従属が存在しない)

業界コード 業界名
001 不動産
002 電力
003 医療
004 IT

まとめ f:id:haru89:20200510113505p:plain:w70

テーブル設計をする際に気をつけるポイントがわかった。特に推移的関数従属が存在するかどうか見極め、正しくテーブルを分解したい。

参考

おうちで学べるデータベースのきほん ミック (著), 木村 明治 (著)