LoginSignup
1
1

More than 5 years have passed since last update.

2010/12/23 RDBMSを使っているのに「リレーショナル」がよく分からない人たちへ

Last updated at Posted at 2017-12-15

昔書いた社内ブログ記事です。


どうも(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つの表の関係性(リレーション)を見ながら
知りたい情報を引き出すことを得意とするデータベースを
「リレーショナルデータベース」と言います。

「友達の情報」表の「名前」と「年賀状の記録」表の「相手の名前」が
同じ人を指しているっていうのがこの場合の関係性ですね。

20101223.png

大きな表になんでもかんでも情報をまとめないで、
表を小分けに管理しておくと、ちょっとの調べ物や、
内容を変更するのにもあまり手間がかからないのです。

「友達の情報」に後から「誕生日」の項目を追加したりとかね。

ちなみに同姓同名の人がいるかもしれないことや、
実際にこの表を使うのはコンピュータだということから、
基本情報を管理する表にはかぶらない番号をふるのが普通です。
(この場合は友達の情報の表。)

年賀状の記録

出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とか。

SQL
select love from you where date = '2010-12-25';

それではまた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1