Your SlideShare is downloading. ×

深い親子関係のテーブル設計
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

深い親子関係のテーブル設計

55
views

Published on

2015-02-13 外部キーNight 発表資料

2015-02-13 外部キーNight 発表資料


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
55
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 深い親子関係を 整合性も崩さず非正規化 2015-02-13 外部キーNight @yuba http://cs.hatenablog.jp/
  • 2. 自己紹介 @yuba  株式会社インターコム  型と制約大好き人間  ブログとかQiitaで書いてる記事がこんな感じです。  論理削除と一意性制約を両立させる方法・DB製品別 – Qiita  トランザクションをネストしたらどうなる? 内側だけロールバックできる? - Qiita  データベース操作でデッドロックは不可避 – C Sharpens you up  外部キー参照しあうテーブルを遅延制約で実現する – C Sharpens you up  SQL Serverの計算列を使ってツリー構造データを完全に制約付ける – C Sharpens you up  SQLのカラム制約はテーブル制約と等価 – C Sharpens you up
  • 3. テーブルの深い親子関係
  • 4. 正規なままではSELECT大変ですよね  あるユーザーに最近付いたコメントを取得したい
  • 5. 正規なままではSELECT大変ですよね  あるユーザーに最近付いたコメントを取得したい _人人人人人人人人人人人人人人人人人人人人人人人人人人_ > SELECT .... FROM コメント < > LEFT JOIN 記事 ON コメント.id_記事=記事.id < > LEFT JOIN ブログ ON 記事.id_ブログ=ブログ.id < > WHERE ブログ.id_ユーザー=... AND コメント.date > .. <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  • 6. 正規なままではSELECT大変ですよね JOIN HELL _人人人人人人人人人人人人人人人人人人人人人人人人人人_ > SELECT .... FROM コメント < > LEFT JOIN 記事 ON コメント.id_記事=記事.id < > LEFT JOIN ブログ ON 記事.id_ブログ=ブログ.id < > WHERE ブログ.id_ユーザー=... AND コメント.date > .. <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  • 7. 非正規化しますよね
  • 8. 非正規化しますよね でもこの id_ユーザーが正しいこと、 保証したいですよね。
  • 9. 参照整合性も保ったまま 非正規化してみよう 複合キーだ!
  • 10. 参照整合性も保ったまま 非正規化してみよう 外部キー込みの複合キーは O/Rマッパー泣かせ。 特にINSERTが書けない。
  • 11. やはり、単一キーのまま 非正規化するしかない?
  • 12. 2つのプロジェクトで後悔した末に 編み出した解決方法
  • 13. 解決:単一主キーは保ったまま…
  • 14. 解決:単一主キーは保ったまま 主キー以外のカラムを絡めた UNIQUEキーに外部キーを張ろう
  • 15. ご清聴ありがとうございました  O/Rマッパーには、あくまでこうだと思わせておけばいいのです。