SlideShare a Scribd company logo
1 of 13
Download to read offline
テーブル構造


                  BugStatus




      Tags

                    Bugs        Accounts

   Scrennshots




    Products     BugsProducts   Comments
1.ジェイウォーク(信号無視)

 【目的】
 複数の値を持つ属性を格納する
 ※Productsを担当するAccountsを定義したい

 【アンチパターン】
 カンマ区切りフォーマットのリストを格納
 ※Productsテーブルにaccount_id列(VARCHAR(100))を追加し、
 「111,222,333」とカンマ区切りでaccount_idを登録する


 【解決策】
 交差テーブルを作成する

  Products    Accounts




                          Products    Contacts   Accounts
2.ナイーブツリー(素朴な木)
3.IDリクワイアド(とりあえずID)


 【目的】
 全てのテーブルが主キーを持つこと


 【アンチパターン】
 CREATE TABLE Bugs (
                                 冗⻑なキー
   id SERIAL PRIMARY KEY,
   bug_id VARCHAR(10) UNIQUE,
   description VARCHAR(10000),
   …
 );


 【解決策】
 状況に応じて適切に調整
 ※自然キーと複合キーを使おうね
 ※ORMフレームワークだと「id」固定?⇛書き換え可能
4.キーレスエントリー(外部キー嫌い)


 【目的】
 データベースのアーキテクチャを単純化する


 【アンチパターン】
 外部キー制約を利⽤しない
 ※更新時に外部キー制約が邪魔になる
 ※パフォーマンスが下がる?


 【解決策】
 外部キー制約を利⽤
 ※アプリケーションでデータの整合性を保証するの?
 ※カスケード更新を利⽤
 ※パッチ等での更新ミスも防げるよ
5.EAV(エンティティ・アトリビュート・バリュー)


 【目的】                     Issue                            Bug

 可変属性をサポート         +   Date_reported                + Severity
                   +   Reporter                     + Version_affected
                   +   Priority
                   +   Status
                                                      FeatureRequest
                                                    + Sponsor




 【アンチパターン】             Issues
                                         Issue
                                       Attributes
 汎⽤的な属性テーブル




 【解決策】
 まず、しっかり設計
 ※サブタイプ数が限られていたら「継承」を利⽤
 ※本当にサブタイプ数が可変なのであれば、LOB列にXML、JSONで格納
6.ポリモーフィック関連


 【目的】                                         Bugs
 複数の親テーブルを参照
                                                                 Comments
                                              Feature
                                             Requests



 【アンチパターン】
 二重目的の外部キーを使⽤する
 CREATE TABLE    Comments (
    comment_id   SERIAL PRIMARY KEY,
    issue_type   VARCHAR(20),             -- Bugs or ReatureRequest
    issue_id     BIGINT UNSIGNET NOT NULL
    …
 );


 【解決策】
                                                                   Bugs
 リレーションシップの単純化                                Bugs
                                                                 Comments
 ※参照が逆                                                                       Comments
 ※交差テーブルの作成                                   Feature             Features
                                             Requests            Comments
7.マルチカラムアトリビュート(複数列属性)


 【目的】
 複数の値を持つ属性を格納する
 ※Bugsにタグを付ける



 【アンチパターン】
 複数列を定義
 CREATE TABLE Bugs (
    bug_id       SERIAL PRIMARY KEY,
    discriptiosn VARCHAR(1000),
    tag1         VARCHAR(20),
    tag2         VARCHAR(20),
    …
 );

 【解決策】
 従属テーブルを作成                             Bugs   tags
8.メタデータトリブル(メタデータ大増殖)


 【目的】
 スケーラビリティを高める
 ※データが増加し続けるテーブルに対応



 【アンチパターン】
 テーブルや列をコピーする
 CREATE TABLE Bugs_2008 ( ...);
 CREATE TABLE Bugs_2009 ( ...);
 CREATE TABLE Bugs_2010 ( ...);




 【解決策】
 パーティショニングと正規化
9.ラウンディングエラー(丸め誤差)


 【目的】
 整数の代わりに小数値を使⽤


 【アンチパターン】
                        丸め誤差
 FLOATデータ型を使⽤


 【解決策】
                     BusStatus   Bugs
 NUMERICデータ型を使⽤
10.サーティワンフレーバー(31のフレーバー)


 【目的】
 列を特定の値に限定する


 【アンチパターン】
 限定する値を列定義で指定する
 CREATE TABLE Bugs (
    -- 他の列
    status VARCHAR(20) CHECK (status IN (NEW,IN PROGRESS,FIXED)
 );



 【解決策】                                           BusStatus        Bugs
 限定する値をデータで指定する
11.ファントムファイル(幻のファイル)




       ファイルは
      BLOGで管理
12.インデックスショットガン(闇雲インデックス)




   MENTORに基づいて効果的な
          Index
 【解決策】
 Measure (測定)
 Explain (解析)
 Nominate(指名)
 Test    (テスト)
 Optimize(最適化)
 Rebuild (再構築)

More Related Content

More from 鉄兵 鈴木 (6)

[ABC Hackathon]アイデア供養
[ABC Hackathon]アイデア供養[ABC Hackathon]アイデア供養
[ABC Hackathon]アイデア供養
 
Hackathon boot camp 1st
Hackathon boot camp 1stHackathon boot camp 1st
Hackathon boot camp 1st
 
部下見守る君
部下見守る君部下見守る君
部下見守る君
 
ドキュメントレビュー君システム構成図
ドキュメントレビュー君システム構成図ドキュメントレビュー君システム構成図
ドキュメントレビュー君システム構成図
 
Hackathon boot camp
Hackathon boot campHackathon boot camp
Hackathon boot camp
 
スマイレートシステム構成イメージ
スマイレートシステム構成イメージスマイレートシステム構成イメージ
スマイレートシステム構成イメージ
 

Sqlap teppei696