Enviar pesquisa
Carregar
evacuate_from_sti
•
2 gostaram
•
1,027 visualizações
yancya
Seguir
RubyHiroba 2014 の生活発表会で発表したスライドです STI についてと、それを避けたらどういう実装がありうるかという話です
Leia menos
Leia mais
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 33
Baixar agora
Baixar para ler offline
Recomendados
Slide deck from my talk at the Santa Barbara JavaScript Meetup, August 5th, 2014
Yeoman - Santa Barbara JavaScript Meetup
Yeoman - Santa Barbara JavaScript Meetup
Tim Doherty
TokyoR 28回 修正版
Tokyo r28 1
Tokyo r28 1
Takashi Minoda
Java9から17で入った新機能で、実際コード書く上で使いそうなものをピックアップします。 Java8を使い続けていた人向けです。
Java8から17へ
Java8から17へ
onozaty
OSC 2017 Tokyo/Fall での講演資料
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
Yoshinori Nakanishi
第38回関西PHP勉強会
インデントを減らそう
インデントを減らそう
知之 朝枝
2008-03-10 に club db2 にて行った Ruby on Rails 入門セミナーの資料です。
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Rubyで OpenCV
Opencv by-yancya
Opencv by-yancya
yancya
銀座 Rails #8 の LT で発表した際のスライドです
SQLQL とは!?
SQLQL とは!?
yancya
Recomendados
Slide deck from my talk at the Santa Barbara JavaScript Meetup, August 5th, 2014
Yeoman - Santa Barbara JavaScript Meetup
Yeoman - Santa Barbara JavaScript Meetup
Tim Doherty
TokyoR 28回 修正版
Tokyo r28 1
Tokyo r28 1
Takashi Minoda
Java9から17で入った新機能で、実際コード書く上で使いそうなものをピックアップします。 Java8を使い続けていた人向けです。
Java8から17へ
Java8から17へ
onozaty
OSC 2017 Tokyo/Fall での講演資料
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
Yoshinori Nakanishi
第38回関西PHP勉強会
インデントを減らそう
インデントを減らそう
知之 朝枝
2008-03-10 に club db2 にて行った Ruby on Rails 入門セミナーの資料です。
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Rubyで OpenCV
Opencv by-yancya
Opencv by-yancya
yancya
銀座 Rails #8 の LT で発表した際のスライドです
SQLQL とは!?
SQLQL とは!?
yancya
RailsDM 2019 Day 1
SQLQL は GraphQL にとってなんなのか
SQLQL は GraphQL にとってなんなのか
yancya
TokyuRuby会議11での発表資料
どう書く日記
どう書く日記
yancya
GCPUG LT 忘年会での LT
BigQuery の relation 生成
BigQuery の relation 生成
yancya
2016/11/29 GCPUG での発表資料 BigQuery の Standard SQL について
use_legacy_sql=false
use_legacy_sql=false
yancya
目が覚めたら、二次元配列が RDB の世界に転生してた!? -- The RubyKaigi 2016 After Party & Lightning Talks! での発表スライドです
Relation の館
Relation の館
yancya
「@arimo と飲む会 2016/06/03(カジュアル)」 (http://connpass.com/event/31960/) で発表した LT のスライドですー
なんか
なんか
yancya
大江戸 Ruby 会議 05 の Ninja Talks で話した内容のスライドです
SQL 脳から見た Ruby
SQL 脳から見た Ruby
yancya
RubyHiroba 2014 で発表した、Refinements についての LT 資料です
A investigative report of refinements
A investigative report of refinements
yancya
万葉.rb の公募 LT で発表した際のスライドです
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのか
yancya
Mais conteúdo relacionado
Mais de yancya
RailsDM 2019 Day 1
SQLQL は GraphQL にとってなんなのか
SQLQL は GraphQL にとってなんなのか
yancya
TokyuRuby会議11での発表資料
どう書く日記
どう書く日記
yancya
GCPUG LT 忘年会での LT
BigQuery の relation 生成
BigQuery の relation 生成
yancya
2016/11/29 GCPUG での発表資料 BigQuery の Standard SQL について
use_legacy_sql=false
use_legacy_sql=false
yancya
目が覚めたら、二次元配列が RDB の世界に転生してた!? -- The RubyKaigi 2016 After Party & Lightning Talks! での発表スライドです
Relation の館
Relation の館
yancya
「@arimo と飲む会 2016/06/03(カジュアル)」 (http://connpass.com/event/31960/) で発表した LT のスライドですー
なんか
なんか
yancya
大江戸 Ruby 会議 05 の Ninja Talks で話した内容のスライドです
SQL 脳から見た Ruby
SQL 脳から見た Ruby
yancya
RubyHiroba 2014 で発表した、Refinements についての LT 資料です
A investigative report of refinements
A investigative report of refinements
yancya
万葉.rb の公募 LT で発表した際のスライドです
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのか
yancya
Mais de yancya
(9)
SQLQL は GraphQL にとってなんなのか
SQLQL は GraphQL にとってなんなのか
どう書く日記
どう書く日記
BigQuery の relation 生成
BigQuery の relation 生成
use_legacy_sql=false
use_legacy_sql=false
Relation の館
Relation の館
なんか
なんか
SQL 脳から見た Ruby
SQL 脳から見た Ruby
A investigative report of refinements
A investigative report of refinements
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのか
evacuate_from_sti
1.
SSTTIIを避けたいIwishIevacuateSTI yancya RubyHiroba 2014
2014/09/21 PoweredbyRabbit2.1.3andCOZMIXNG
2.
自⼰紹介 @yancya 何者でも無い1⼈のRubyist
3.
STIって使ってます? どうですか?
4.
STIとは SingleTableInheritance 単⼀テーブル継承
モデルクラスを継承で表現 し、永続化部分はスーパーク ラスのテーブル1枚でまかな う
5.
STIの実装例(親クラス)
6.
STIの実装例(親クラス)
7.
STIの実装例(⼦クラス)
8.
STIの便利さ サブクラス特有のカラムを add̲columnして、スーパー
クラスを継承するだけで作れ ちゃう便利 スーパークラスに共通処理や 属性を持たせることで、サブ クラスのコードがスッキリ!
9.
STIすごい メタデータカラムがあるの で、親クラスのインスタンス
から、⼦クラスを特定出来た りする
10.
!
11.
!#
12.
$
13.
STIの注意点
14.
!#$ %'()*+,-,./0,,*123,4(
! #
15.
外部キー制約 ついにRails本体に外部キー 制約サポートがくるよー
Support for real foreignkeys!
16.
[「http://weblog.rubyonrails.org/2014/8/20/ Rails-4-2-beta1/」より引用]
17.
外部キー制約って使います? みなさん、どうですか?
18.
STIと外部キー制約 外部キー制約を使うとして ⼦クラス特有の属性を定義
その属性が外部キー その属性にNOTNULL制約 を付けたいとする
19.
STIで外部キー制約 親や他の⼦クラスから INSERTしたらNULLが⼊
っちゃう(⼊らなくてエラ ー) いいこと思いついた!外部テ ーブル側に{id:99999, value:無し}みたいなレコ ードを⼊れておいて、外部キ ーにNULLが⼊りそうにな ったら、代わりに99999を
20.
例えば、STIを避ける STIを避ける必要は全然無い 呪われしRDB厨の業
Nullablecolumn 正規化 では、しかるべきデータ格納 ⽅法とは
21.
STIの背景 Relational databases
don't support inheritance, so when mapping... [「http://www.martinfowler.com/eaaCatalog/ singleTableInheritance.html」より引用]
22.
RDBMS みなさん、何使ってます?
23.
PostgreSQL RDBMS界の優等⽣ バージョン毎の⽇本語ドキュ
メントが充実 Herokuのデフォルト RDBMS v9.2からJSON型をサポー ト(v9.3で更に⾼機能に)
24.
TableInherited Relationaldatabases don'tsupportinheritance,
sowhenmapping... テーブルの継承 PostgreSQLにはあるんです
25.
継承先テーブルの作成
26.
!
27.
#
28.
!!
29.
$ %'%
30.
(
31.
!# !
32.
) !
33.
$%'%
34.
) (
35.
!# !
36.
Wherearowcome from? この列は特に、継承階層か
らの選択問い合わせでは便 利です。tableoidはテーブ ル名を得るために pg̲classのoid列に結合す ることができます。 [「システム⾏.-.tableoid」より引用]
37.
BehaviorofParental Model
*
38.
( ! #! + $
39.
#!
40.
! ,
41.
+ + $+
42.
-)
43.
).
44.
/012++!+#345! 6'+#,+ 7+,12+4
%%8
45.
! +9+ 3
46.
BehaviorofInherit Model 継承したままだと
table̲nameがスーパークラ スのもの
47.
ModelClasses
48.
テーブル継承の注意点 多重継承ができる 単にデータベースの機能とし
て⾒れば便利 多重継承の無いプログラミン グ⾔語とマッピングしづらい
49.
テーブル継承の注意点 親テーブルでPRIMARY KEY,UNIQUEの宣⾔をして
いても、⼦テーブルまでは制 約が伝播しません 親テーブルに外部キーを持っ て、外部キー制約をつけてい ても、⼦テーブルまで制約が 伝播しません
50.
テーブル継承の注意点 NOTNULL DEFAULT
これらは⼦テーブルに伝播し ます
51.
何が起こりうるか PRIMARYKEY,UNIQUEに ついて、親まで遡らないの
で、⼦テーブルから重複値を ⼊れ放題 ⼦テーブルに別途制約を付け ても、⼦テーブル内でしかチ ェックしないので根本解決に ならない
52.
具体的に困ること 560*1.78
53.
593,+'0,1-60*1.78 !
54.
: ただ、DEFAULTは伝播するの で、IDシーケンスは親テーブルと
共通なので、IDを直接指定して INSERTUPDATEしなければ問題 ない。しなければ
55.
回避策
56.
テーブル継承のこれから PostgreSQL9.3.2⽂書 5.8.1によれば
「これらの機能の不⾜は、今 後のリリースでおそらく改善 されるでしょう」とのこと ただ、まぁVersion7.4から ずっと書いてあるので
57.
まとめ おとなしくSTIを使いましょ う
でも、必要がなくなったら使 うのをやめたい
58.
質疑応答 もし質問がなければ、こちら から皆さんに質問したり
まめ知識を披露しますね PoweredbyRabbit2.1.3andCOZMIXNG
Baixar agora