2020/06/24

やったこと

競技プログラミング

- AGC006A Prefix and Suffix:解けた

 

SQLアンチパターン

読み始めた。一章ごとに、アンチパターンが完結にまとまっていて良い。ざっと読んでアンチパターンを把握し、必要となったときに見返すのが良さそう

 

# 1章 ジェイウォーク(信号無視)
- 目的: 複数の値を持つ属性を格納する
- アンチパターン:カンマ区切りのフォーマットのリストを格納する
- 解決策:交差テーブルを作成する

 

# 2章 ナイーブツリー(素朴な木)
- 目的:階層構造を格納し、クエリを実行する ex)組織図、掲示板のスレッド形式のコメント
- アンチパターン:常に親のみに依存する
- 解決策:代替ツリーモデルを使用する
- 経路列挙モデル:先祖の系譜を表す文字列を各ノードの属性として格納する。参照整合性が保証できず、冗長な情報を格納するため脆弱な麺がある。
- 入れ子集合モデル:直近の親ではなく、子孫の集合に関する情報を各ノードに格納する。巧妙な設計手法だが、巧妙すぎるとも言えます。ツリーの検索の必要が多いときに適している
- 閉包テーブルモデル:ツリー全体のパスを格納する。最も用途が広い。関連付けを格納するために、別個テーブルが必要。階層が深くなると多くの行数が必要になり、計算が楽になる分、スペースが消費される

 

# 3章 IDリクワイアド(とりあえずID)
- 目的:主キーの規約を確立する
- アンチパターン:すべてのテーブルに「id」列を用いる
- 解決策:状況に応じて適切に調整する。わかりやすい列名にする、規約に縛られない、自然キーと複合キーの活用