昔書いた社内ブログ記事です。
どうも(p・ω・q)
今日のお題はリレーショナルデータベースです。
この時期なので、設定は「年賀状管理」にでもしましょうか。
投函期間はまだかろうじて過ぎていませんよ(@´ω`@)<25カナ
+
年賀状を出すのに必要なのは、名前と住所の情報ですね。
男の子向けと女の子向けの絵柄を使い分けるので、性別も書いておきましょう。
これを身近なところで、エ■セルにまとめてみます。
名前 | 性別 | 郵便番号 | 住所 |
---|---|---|---|
骨川スネ夫 | 男 | 176-0000 | 東京都練馬区月見台すすきヶ原 3-10-5 |
野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 |
ミニーマウス | 女 | 279-8512 | 千葉県浦安市舞浜1-1 TDL トゥーンタウン ミッキーAve.1 |
これだけじゃあまり役に立たないので、
年賀状を出したか出さないか、もらったかもらってないかも書いてみます。
名前 | 性別 | 郵便番号 | 住所 | 2009年 出した | 2009年 もらった | 2010 年出した |
---|---|---|---|---|---|---|
骨川スネ夫 | 男 | 176-0000 | 東京都練馬区月見台すすきヶ原 3-10-5 | ○ | × | × |
野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 | ○ | ○ | ○ |
ミニーマウス | 女 | 279-8512 | 千葉県浦安市舞浜1-1 TDL トゥーンタウン ミッキーAve.1 | × | × | ○ |
これだとどんどん右に伸びていって使いにくいですね。
(私の母親はこれを手帳に書いていたような気がしますw)
また、一番上の行(見出し)は一度決めたら、
極力変更しない方がメンテナンスがしやすいです。
なので、表を下に伸ばすように書いてみます。
年 | 出or入 | 名前 | 性別 | 郵便番号 | 住所 |
---|---|---|---|---|---|
2009 | 出した | 骨川スネ夫 | 男 | 176-0000 | 東京都練馬区月見台すすきヶ原 3-10-5 |
2009 | 出した | 野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 |
2009 | もらった | 野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 |
2010 | 出した | 野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 |
2010 | 出した | ミニーマウス | 女 | 279-8512 | 千葉県浦安市舞浜1-1 TDL トゥーンタウン ミッキーAve.1 |
さきほどよりマシになりましたが、今度は同じことが何箇所にも書いてあって見にくくなりました。
だぶっている情報はまとめて、表を分割してみましょう。
年賀状の記録
年 | 出or入 | 相手の名前 |
---|---|---|
2009 | 出した | 骨川スネ夫 |
2009 | 出した | 野原しんのすけ |
2009 | もらった | 野原しんのすけ |
2010 | 出した | 野原しんのすけ |
2010 | 出した | ミニーマウス |
友達の情報
名前 | 性別 | 郵便番号 | 住所 |
---|---|---|---|
骨川スネ夫 | 男 | 176-0000 | 東京都練馬区月見台すすきヶ原 3-10-5 |
野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 |
ミニーマウス | 女 | 279-8512 | 千葉県浦安市舞浜1-1 TDL トゥーンタウン ミッキーAve.1 |
すっきりしました。
この2つの表を見て「2010年に女の子に出した年賀状の枚数(笑)」が分かりますか?
「年賀状の記録」表で2010年に年賀状を出した相手の名前を覚えて、
「友達の情報」表で、その名前の人の性別を調べればいいんですね。
(「ミニーマウス」って名前だから女だって決め付けちゃダメですよw)
こうやって2つの表の関係性(リレーション)を見ながら
知りたい情報を引き出すことを得意とするデータベースを
「リレーショナルデータベース」と言います。
「友達の情報」表の「名前」と「年賀状の記録」表の「相手の名前」が
同じ人を指しているっていうのがこの場合の関係性ですね。
大きな表になんでもかんでも情報をまとめないで、
表を小分けに管理しておくと、ちょっとの調べ物や、
内容を変更するのにもあまり手間がかからないのです。
「友達の情報」に後から「誕生日」の項目を追加したりとかね。
ちなみに同姓同名の人がいるかもしれないことや、
実際にこの表を使うのはコンピュータだということから、
基本情報を管理する表にはかぶらない番号をふるのが普通です。
(この場合は友達の情報の表。)
年賀状の記録
年 | 出or入 | 相手(友達ID) |
---|---|---|
2009 | 出した | 1 |
2009 | 出した | 2 |
2009 | もらった | 2 |
2010 | 出した | 2 |
2010 | 出した | 3 |
友達の情報
友達ID | 名前 | 性別 | 郵便番号 | 住所 |
---|---|---|---|---|
1 | 骨川スネ夫 | 男 | 176-0000 | 東京都練馬区月見台すすきヶ原 3-10-5 |
2 | 野原しんのすけ | 男 | 344-0000 | 埼玉県春日部市双葉町 904 |
3 | ミニーマウス | 女 | 279-8512 | 千葉県浦安市舞浜1-1 TDL トゥーンタウン ミッキーAve.1 |
表をどうやって作ったり分けたりしたらいいのかっていうのは
データベース設計という工程でやります。
答えはひとつではないので、そういうのを考えるのも面白いです。
Oracle、MySQL、PostgresSQLはリレーショナルデータベースです。
リレーショナルではないデータベースもあります。
最近だとNoSQLとか。
select love from you where date = '2010-12-25';
それではまた。