Soumettre la recherche
Mettre en ligne
evacuate_from_sti
•
2 j'aime
•
1,027 vues
yancya
Suivre
RubyHiroba 2014 の生活発表会で発表したスライドです STI についてと、それを避けたらどういう実装がありうるかという話です
Lire moins
Lire la suite
Signaler
Partager
Signaler
Partager
1 sur 33
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Yeoman - Santa Barbara JavaScript Meetup
Yeoman - Santa Barbara JavaScript Meetup
Tim Doherty
Tokyo r28 1
Tokyo r28 1
Takashi Minoda
Java8から17へ
Java8から17へ
onozaty
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
Yoshinori Nakanishi
インデントを減らそう
インデントを減らそう
知之 朝枝
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Opencv by-yancya
Opencv by-yancya
yancya
SQLQL とは!?
SQLQL とは!?
yancya
Recommandé
Yeoman - Santa Barbara JavaScript Meetup
Yeoman - Santa Barbara JavaScript Meetup
Tim Doherty
Tokyo r28 1
Tokyo r28 1
Takashi Minoda
Java8から17へ
Java8から17へ
onozaty
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-
Yoshinori Nakanishi
インデントを減らそう
インデントを減らそう
知之 朝枝
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Opencv by-yancya
Opencv by-yancya
yancya
SQLQL とは!?
SQLQL とは!?
yancya
SQLQL は GraphQL にとってなんなのか
SQLQL は GraphQL にとってなんなのか
yancya
どう書く日記
どう書く日記
yancya
BigQuery の relation 生成
BigQuery の relation 生成
yancya
use_legacy_sql=false
use_legacy_sql=false
yancya
Relation の館
Relation の館
yancya
なんか
なんか
yancya
SQL 脳から見た Ruby
SQL 脳から見た Ruby
yancya
A investigative report of refinements
A investigative report of refinements
yancya
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのか
yancya
Contenu connexe
Plus de yancya
SQLQL は GraphQL にとってなんなのか
SQLQL は GraphQL にとってなんなのか
yancya
どう書く日記
どう書く日記
yancya
BigQuery の relation 生成
BigQuery の relation 生成
yancya
use_legacy_sql=false
use_legacy_sql=false
yancya
Relation の館
Relation の館
yancya
なんか
なんか
yancya
SQL 脳から見た Ruby
SQL 脳から見た Ruby
yancya
A investigative report of refinements
A investigative report of refinements
yancya
RubyWorld Conference 2012 へ何で行ったのか
RubyWorld Conference 2012 へ何で行ったのか
yancya
Plus 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
Télécharger maintenant