SQLによる検索、Select
Menu Menu
ネットワークゲームの Database
まず、用語を抜き出して見る
ユーザ名
パスワード
キャラクター名
種族
顔のパラメータ1, 顔のパラメータ2, ...
胴のパラメータ1, 胴のパラメータ2, ...
武器の種類
武器の名前 エクスカリバー, Two handed sword
武器の属性
武器の値段
武器の強さ
防具の種類
防具の名前 チェインメール
防具の属性
防具の値段
防具の強さ
回復ドリンクの名前
回復ドリンクの強さ
回復ドリンクの値段さ
所持金
場所
位置
HP
パーティ
種族
移動
戦闘
ダメージ
宝箱の取得
あんまり増やすとめんどくさくなる。
Big Table
名前をユースケースでの使われ方から考えて、属性と値にわける。
user
password
charater
clan
face_param_1
face_param_2
body_param_1
body_param_2
weapon_name
weapon_attribute
weapon_price
weapon_strength
armor
armor_name
armor_attribute
armor_price
armor_strength
potion_name
potion_price
potion_strength
money
place
positon
hp
例題データの作成
ここでは一つの大きな表を用いる。
Excel
create table
select 文
select * from game
select 文の属性の指定
select potion_name from game
select 文の条件
select potion_name from game where potion_price = 100
Perl によるアクセス
Perl の sqlite module を使って、このデータベースにアクセスしてみる。
問題1
select 文の例 自分の考えたゲームのデータベースに対して、実際に使う select 文を3つ考えて、実行結果を示せ。
ユースケース
(1) ユーザの登録 (2) キャラクターの作成 (3) キャラクターの移動 (4) キャラクターの出合い (5) キャラクターの戦闘 (6) 防具の装着 (7) 武器の装着 (8) 宝箱の取得 (9) 回復ドリンクの使用結構ある…
ユースケースから SQL を作成してみる
(1) ユーザの登録 (2) キャラクターの作成 (3) キャラクターの移動 (4) キャラクターの出合い (5) キャラクターの戦闘 (6) 防具の装着 (7) 武器の装着 (8) 宝箱の取得 (9) 回復ドリンクの使用
Index が必要なところはどこか?
create index
Big Table の問題点
挿入時の問題点
削除時の問題点
表全体を見てみると…
作成した SQL の問題点をユースケース一つ一つに付いて考察する。
問題点の整理
冗長性
制約の保証
必要な情報の維持
変更の対象の特定
欠損値の扱い
アクセスは高速か?
何を知りたいのか?
A の B の値を知りたい、変更したい
B を変更したら C も変更する必要がある
例題のデータベースを考察する
UML のクラス図
オブジェクト/クラス
属性値
オブジェクトの関係