【第3回初心者勉強会】データベースを使おう

25
データベースを使おう 飯塚修平 1

Upload: shuhei-iitsuka

Post on 19-Jun-2015

932 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 【第3回初心者勉強会】データベースを使おう

データベースを使おう飯塚修平

1

Page 2: 【第3回初心者勉強会】データベースを使おう

データベースって?データを貯めておくところ

ユーザ プログラム データベース

ex. ユーザ情報、マスター情報、ログ etc.

2

Page 3: 【第3回初心者勉強会】データベースを使おう

RDB (リレーショナルDB)

- SQL という言語を使ってやりとりする- テーブル型のデータ構造

id handle name

1 tushuhei Shuhei Iitsuka

2 amachang Hitoshi Amano

3 masall2 Masahiro Saito

NoSQL (Not Only SQL)

- RDB 以外の DB の総称- データ構造はそれぞれ異なる。

[{handle: “tushuhei”, name: “Shuhei Iitsuka”,friends: [“amachang”,

“masall2”,“naofumiwa”,“phatsu”]}]

3

Page 4: 【第3回初心者勉強会】データベースを使おう

ファイルじゃダメなの?

これとか こんなかんじ

もちろんファイルでもOKです。ただ・・・

4

Page 5: 【第3回初心者勉強会】データベースを使おう

1.かんたん(統一性)

アプリケーションごとにファイル入出力の機能をつくるのは面倒臭い。

DBならSQLで統一できる!

SELECT, INSERT, DELETE

5

Page 6: 【第3回初心者勉強会】データベースを使おう

2.はやい(インデックス)たとえば id が 1 ~ 31 のデータがあったとき、ある id のデータを探すには?

1

2

3

...

30

31

min: 1max: 31

インデックスなし インデックスあり

16

8 24

4 12 20 282 6 10 14 18 22 26 30

1 3 5 7 9 11 1315 171921 2325272931

min: 1max: 5

<2分木探索>

6

Page 7: 【第3回初心者勉強会】データベースを使おう

3.あんしん(アトミック性)たとえば INSERT 処理中にエラーが発生したら 

for i = 0 to 100:hoge()INSERT DATApiyo()

endfor

i=37のときにhoge()でエラー発生、終了!!

1 aaa xxx2 bbb yyy... ... ...... ... ...37 LLL ZZZ

会員情報

中途半端な状態のデータができてしまう。

7

Page 8: 【第3回初心者勉強会】データベースを使おう

sqlite3 test.db #test.db を作成

CREATE TABLE users (id INTEGER, name TEXT);

INSERT INTO users VALUES (1, “tushuhei”);

INSERT INTO users VALUES (2, “amachang”);

SELECT * FROM users;

DELETE FROM users WHERE id = 1;

SELECT COUNT(*) FROM users;

INSERT INTO users VALUES (3, “masall2”);

SELECT AVG(id) FROM users;

.q #終了8

Page 9: 【第3回初心者勉強会】データベースを使おう

データベース設計

{id: 1,name: “tushuhei”,items: [“もろはのつるぎ”, “やくそう”, “まじっくすてっき”]}

ユーザマスタテーブルをつくろう!

9

Page 10: 【第3回初心者勉強会】データベースを使おう

例1id name items

1 “tushuhei”“もろはのやいば”,

“やくそう”, “まじっくすてっき”

2 “amachang”“まじっくすてっき”,

“ぽーしょん”

... ... ...

10

Page 11: 【第3回初心者勉強会】データベースを使おう

こんなときどうする?

「アイテムの名前が変更になった!」

「やくそう」->「べほまぐさ」

ユーザのデータすべてに適用するの・・・?

11

Page 12: 【第3回初心者勉強会】データベースを使おう

例2id name items

1 “tushuhei” 1, 2, 3

2 “amachang” 3, 4

users

id name

1 “もろはのやいば”

2 “やくそう”

3 “まじっくすてっき”

4 “ぽーしょん”

items

ここを変更すればOK

12

Page 13: 【第3回初心者勉強会】データベースを使おう

こんなときどうする?

アイテム “もろはのやいば” を持っている人の一覧を出したい!

このままだと、ユーザがアイテム追加時に面倒

SELECT item FROM users WHERE id = xxx;

$items = $items . “, yyy”;

UPDATE users SET item = $items WHERE id = xxx;

13

Page 14: 【第3回初心者勉強会】データベースを使おう

例3id name

1 “tushuhei”

2 “amachang”

user item

1 1

1 2

1 3

2 3

2 4

id name

1 “もろはのやいば”

2 “やくそう”

3 “まじっくすてっき”

4 “ぽーしょん”

users user_item item

14

Page 15: 【第3回初心者勉強会】データベースを使おう

正規化

正規化とは,データの冗長性を少なくして,関連性の強いデータ項目(属性)郡をまとめて,一事実一箇所(1 fact in 1 place)になるようにすることです。

斎藤末広のページ http://www.mirai.ne.jp/~suehiro/am/kihonyougo/normal.htm

15

Page 16: 【第3回初心者勉強会】データベースを使おう

sqlite3 test.db #test.db を作成

CREATE TABLE items (id INTEGER, name TEXT);

INSERT INTO items VALUES ( ...

CREATE TABLE user_item (user INTEGER, item INTEGER);

INSERT INTO user_item VALUES ( ...

SELECT * FROM users LEFT JOIN user_item ON users.id = user_item.user;# LEFT JOIN: テーブルをくっつけるのに使う。ONは結合条件。

SELECT * FROM users LEFT JOIN user_item ON users.id = user_item.user LEFT JOIN items ON user_item.item = items.id;

16

Page 17: 【第3回初心者勉強会】データベースを使おう

1.@oshiba_bot

CREATE TABLE tweets (

id INTEGER PRIMARY KEY,

tweet_id INTEGER,

);

同じつぶやきを変換しないようにする。

17

Page 18: 【第3回初心者勉強会】データベースを使おう

2.お花サプライズ!

18

Page 19: 【第3回初心者勉強会】データベースを使おう

3.ウェルカムページメーカー

no database.

19

Page 20: 【第3回初心者勉強会】データベースを使おう

今後の予定2/18(Sat) 11:00-14:00 Amazon EC2勉強会

2/18(Sat) 18:00-「ゲームのちからで世界を変えよう会議」参加のためお休み

2/25(Sat) 18:00- 飯塚が用事あり(要相談)

2/26(Sun) か 3/3(Sat) プロジェクト割振り会

3月中旬 開発合宿@東京大学検見川運動場

5月 リリース会20

Page 21: 【第3回初心者勉強会】データベースを使おう

参考: お花サプライズ!

解決する問題・痛み

解決法アイデア

ビジネスプラン

プロダクトデザイン

プロトタイプ v0

生花店との提携 決済代行会社との提携

プロトタイプ v1 プロトタイプ v2 リリースプロダクト設計/開発

ビジネス設計/開発

8月 9月 10 月 11 月

合宿

21

Page 22: 【第3回初心者勉強会】データベースを使おう

参考: 国会.in

7/1 アイデア出し

7月下旬 プロトタイプ完成

8月 開発合宿 -> 基本的な機能が揃う

9月半ば リリース

22

Page 23: 【第3回初心者勉強会】データベースを使おう

東京大学検見川運動場

23

Page 24: 【第3回初心者勉強会】データベースを使おう

東京大学検見川運動場

24

Page 25: 【第3回初心者勉強会】データベースを使おう

開発合宿

3月頃の学生が春休みときに。

3泊4日

各プロジェクトに必ず学生が一人はいる。

途中参加・途中退出あり

準備が命「現地では絶対に勉強しない!」

25