Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Sqlap teppei696

  • Be the first to comment

  • Be the first to like this

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 (再構築)

×