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 のクラス図
オブジェクト/クラス 属性値 オブジェクトの関係