O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
テーブル構造                  BugStatus      Tags                    Bugs        Accounts   Scrennshots    Products     BugsProd...
1.ジェイウォーク(信号無視) 【目的】 複数の値を持つ属性を格納する ※Productsを担当するAccountsを定義したい 【アンチパターン】 カンマ区切りフォーマットのリストを格納 ※Productsテーブルにaccount_id列(V...
2.ナイーブツリー(素朴な木)
3.IDリクワイアド(とりあえずID) 【目的】 全てのテーブルが主キーを持つこと 【アンチパターン】 CREATE TABLE Bugs (                                 冗⻑なキー   id SERIAL ...
4.キーレスエントリー(外部キー嫌い) 【目的】 データベースのアーキテクチャを単純化する 【アンチパターン】 外部キー制約を利⽤しない ※更新時に外部キー制約が邪魔になる ※パフォーマンスが下がる? 【解決策】 外部キー制約を利⽤ ※アプリケ...
5.EAV(エンティティ・アトリビュート・バリュー) 【目的】                     Issue                            Bug 可変属性をサポート         +   Date_report...
6.ポリモーフィック関連 【目的】                                         Bugs 複数の親テーブルを参照                                                ...
7.マルチカラムアトリビュート(複数列属性) 【目的】 複数の値を持つ属性を格納する ※Bugsにタグを付ける 【アンチパターン】 複数列を定義 CREATE TABLE Bugs (    bug_id       SERIAL PRIMAR...
8.メタデータトリブル(メタデータ大増殖) 【目的】 スケーラビリティを高める ※データが増加し続けるテーブルに対応 【アンチパターン】 テーブルや列をコピーする CREATE TABLE Bugs_2008 ( ...); CREATE TA...
9.ラウンディングエラー(丸め誤差) 【目的】 整数の代わりに小数値を使⽤ 【アンチパターン】                        丸め誤差 FLOATデータ型を使⽤ 【解決策】                     BusStat...
10.サーティワンフレーバー(31のフレーバー) 【目的】 列を特定の値に限定する 【アンチパターン】 限定する値を列定義で指定する CREATE TABLE Bugs (    -- 他の列    status VARCHAR(20) CHE...
11.ファントムファイル(幻のファイル)       ファイルは      BLOGで管理
12.インデックスショットガン(闇雲インデックス)   MENTORに基づいて効果的な          Index 【解決策】 Measure (測定) Explain (解析) Nominate(指名) Test    (テスト) Opti...
Próximos SlideShares
Carregando em…5
×

Sqlap teppei696

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sqlap teppei696

  1. 1. テーブル構造 BugStatus Tags Bugs Accounts Scrennshots Products BugsProducts Comments
  2. 2. 1.ジェイウォーク(信号無視) 【目的】 複数の値を持つ属性を格納する ※Productsを担当するAccountsを定義したい 【アンチパターン】 カンマ区切りフォーマットのリストを格納 ※Productsテーブルにaccount_id列(VARCHAR(100))を追加し、 「111,222,333」とカンマ区切りでaccount_idを登録する 【解決策】 交差テーブルを作成する Products Accounts Products Contacts Accounts
  3. 3. 2.ナイーブツリー(素朴な木)
  4. 4. 3.IDリクワイアド(とりあえずID) 【目的】 全てのテーブルが主キーを持つこと 【アンチパターン】 CREATE TABLE Bugs ( 冗⻑なキー id SERIAL PRIMARY KEY, bug_id VARCHAR(10) UNIQUE, description VARCHAR(10000), … ); 【解決策】 状況に応じて適切に調整 ※自然キーと複合キーを使おうね ※ORMフレームワークだと「id」固定?⇛書き換え可能
  5. 5. 4.キーレスエントリー(外部キー嫌い) 【目的】 データベースのアーキテクチャを単純化する 【アンチパターン】 外部キー制約を利⽤しない ※更新時に外部キー制約が邪魔になる ※パフォーマンスが下がる? 【解決策】 外部キー制約を利⽤ ※アプリケーションでデータの整合性を保証するの? ※カスケード更新を利⽤ ※パッチ等での更新ミスも防げるよ
  6. 6. 5.EAV(エンティティ・アトリビュート・バリュー) 【目的】 Issue Bug 可変属性をサポート + Date_reported + Severity + Reporter + Version_affected + Priority + Status FeatureRequest + Sponsor 【アンチパターン】 Issues Issue Attributes 汎⽤的な属性テーブル 【解決策】 まず、しっかり設計 ※サブタイプ数が限られていたら「継承」を利⽤ ※本当にサブタイプ数が可変なのであれば、LOB列にXML、JSONで格納
  7. 7. 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
  8. 8. 7.マルチカラムアトリビュート(複数列属性) 【目的】 複数の値を持つ属性を格納する ※Bugsにタグを付ける 【アンチパターン】 複数列を定義 CREATE TABLE Bugs ( bug_id SERIAL PRIMARY KEY, discriptiosn VARCHAR(1000), tag1 VARCHAR(20), tag2 VARCHAR(20), … ); 【解決策】 従属テーブルを作成 Bugs tags
  9. 9. 8.メタデータトリブル(メタデータ大増殖) 【目的】 スケーラビリティを高める ※データが増加し続けるテーブルに対応 【アンチパターン】 テーブルや列をコピーする CREATE TABLE Bugs_2008 ( ...); CREATE TABLE Bugs_2009 ( ...); CREATE TABLE Bugs_2010 ( ...); 【解決策】 パーティショニングと正規化
  10. 10. 9.ラウンディングエラー(丸め誤差) 【目的】 整数の代わりに小数値を使⽤ 【アンチパターン】 丸め誤差 FLOATデータ型を使⽤ 【解決策】 BusStatus Bugs NUMERICデータ型を使⽤
  11. 11. 10.サーティワンフレーバー(31のフレーバー) 【目的】 列を特定の値に限定する 【アンチパターン】 限定する値を列定義で指定する CREATE TABLE Bugs ( -- 他の列 status VARCHAR(20) CHECK (status IN (NEW,IN PROGRESS,FIXED) ); 【解決策】 BusStatus Bugs 限定する値をデータで指定する
  12. 12. 11.ファントムファイル(幻のファイル) ファイルは BLOGで管理
  13. 13. 12.インデックスショットガン(闇雲インデックス) MENTORに基づいて効果的な Index 【解決策】 Measure (測定) Explain (解析) Nominate(指名) Test (テスト) Optimize(最適化) Rebuild (再構築)

×