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 のクラス図

    オブジェクト/クラス
    属性値
    オブジェクトの関係
 
    

Shinji KONO / Mon Jan 16 13:48:33 2012