感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

原子的なデータと正規化、主キーについて。

スポンサーリンク

原子的なテーブルの規則

  • 原子的なデータを持つ列は、その列に同種のデータを複数持つことはできない
name interests
sho322 basketball,soccer,programming
yoshida pachinko,gokon

こんな感じで、interestsの列に同種のデータを複数持っていると、これは原子的ではない。

  • 原子的なデータを持つテーブルは、同種のデータを持つ列を複数持てない
name interest1 interest2 interest3
sho322 basketball soccer programming
yoshida pachinko gokon girls date

こんな感じで、interest1,interest2,interest3みたいにするのも原子的ではない。

原子的であるってどういうこと?

原子的であるとは、データを「これ以上分割できない、あるいは分割すべきではない最少のデータの断片」に分解されていることを意味する。

原子的であることは何に役に立つのか

データが正確であることが保証できる。たとえば、番地に対する列がある場合、その列には数値だけが入ることが保証できる。
また、クエリ検索が効率的になる。
ひとつのセル(なんていうんだっけ?箱1つ)にカンマ区切りで色々なデータが入っていると、検索が大変になる。
結果、SQLの実行時間が長くなってしまう。

正規化する理由

正規化するということは、新しい設計者でも理解できる標準的な規則に従うことを意味する。
正規化されたテーブルは重複データを持たないので、データベースのサイズを削減できる。
また、検索するデータが少ないので、クエリがより高速になる。

第一正規化のルール

1NF(first normal form)の状態、つまり第一正規化を実現するためのルールは2つ。

  • データの各行は、原子的な値を含まなければならない
  • データの各行は、主キーとして知られる、一意識別子を持たなければならない。

主キーのルール

  • 主キーはNULLにできない
  • 主キーにはレコード挿入時に値を与える必要がある
  • 主キーは簡潔でなければならない
  • 主キーの値は変更できない

主キーの設定の仕方

新しいレコードを挿入するたびにPRIMARY KEY列に新しい値を割り当てるのが面倒。
そういうときに考える簡単な方法は2つあって、1つ目は、
「そもそも一意だとわかっているデータ列を主キーとして扱う」
という方法。
もう1つは、
「一意の値を保持するためだけの完全に新しい列を作成すること」
である。
MySQLで自動インクリメントするには、「AUTO_INCREMENT」というキーワードを加える。

CREATE TABLE my_friends
(
  friend_id INT NOT NULL AUTO_INCREMENT,
  last_name varchar(30) default NULL,
  first_name varchar(20) default NULL
  PRIMARY KEY (friend_id)
)

みたいな感じ。

この記事の内容をもっと学べる本

Head First SQL ―頭とからだで覚えるSQLの基本

Head First SQL ―頭とからだで覚えるSQLの基本


SQLだけじゃない。テーブルの設計から正規化のルールまで、それぞれに詳しい具体例を用いて本当に丁寧に解説してくれる。これのおかげでDBの理解がずいぶん進んだ。見た目はふざけているように見えるけれど、中身は本当に良い本。

感謝のプログラミング

今回で感謝のプログラミングは【619時間目】
10000時間まで、あと【9381時間】