Calender
Sun Mon Tue Wed Thu Fri Sat
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>
広告
SEARCH

SELECTED ENTRIES
RECENT COMMENTS
RECENT TRACKBACK
CATEGORIES
ARCHIVES
LINKS
PROFILE
OTHERS
SKYPE
PC: skype.jojo.jp
chat
iPad: iphone.jojo.jp
chat call
THANKS



本日:
昨日:
多言語
広告
 ▼▲ 作業日報 ▼△
    What's under the hood?
<< pgpool-II パラレルモード構成 導入断念_図説 | main | NULL の 正規表現 は ¥x0 (SED) >>
【PostgreSQL】多重継承テーブルの挙動 (INHERITS)
 PostgreSQLではテーブルの継承機能がサポートされていますが、多重継承が可能となっています。
 あまりなじみの無い機能で、気になった点を少し調査してみました

(1)継承元テーブルが2つ以上のテーブルで利用されている場合、利用されたテーブルの値だけ増加するのか?
TABLE1 TABLE2  TABLE3             TABLE4(1+2) TABLE5(1+3) 
+--+   +-----+  +-----+            +--+-----+ +--+-----+
|id|   |data1|  |data2| 多重継承-> |id|data1| |id|data2| 
+--+   +-----+  +-----+            +--+-----+ +--+-----
                                         ↓ 
+--+   +-----+  +-----+            +--+----+  +--+----+
|id|   |data1|  |data1|            |id|data|  |id|data|
+--+   +-----+  +-----+            +--+----+  +--+----+
| 1|   |  aaa|  |  ccc|   <---     | 1| aaa|  |11| ccc|
+--+   +-----+  +-----+            +--+----+  +--+----+
| 2|   |  bbb|  |  ddd|            | 2| bbb|  |12| ddd|
+--+   +-----+  +-----+            +--+----+  +--+----+
|11|
+--+
|12|
+--+ ← idは全ての継承先テーブルのデータすべてを包含する

(2)継承元テーブル側のデータ削除は子テーブルに影響するか?
TABLE1   TABLE2             TABLE3
+--+    +----+              +--+----+
|id|    |data|  -多重継承-> |id|data|
+--+    +----+              +--+----+
                               |
                          DATA INSERT
                              ↓ 
+--+    +----+              +--+----+
|id|    |data|              |id|data|
+--+    +----+              +--+----+
| 1|    | aaa|   <----      | 1| aaa|
+--+    +----+              +--+----+
| 2|    | bbb|              | 2| bbb|
+--+    +----+              +--+----+
 ↓                 TABLE2  TABLE3
+--+                +----+  +--+----+
|id|                |data|  |id|data|
+--+  DELETE FROM   +----+  +--+----+
| 1|   TABLE1       | bbb|  | 2| bbb|
+--+   WHEREid=1;→ +----+  +--+----+
| 2|                 ---削除される---
+--+                  

(3)継承元テーブルにユニークなプライマリキーががある場合継承先テーブルでその制約は受けるか
TABLE1 TABLE2  TABLE3              TABLE4    TABLE5 
+--+   +-----+  +-----+            +--+-----+ +--+-----+
|id|   |data1|  |data2| 多重継承-> |id|data1| |id|data2| 
+--+   +-----+  +-----+            +--+-----+ +--+-----
                                         ↓ 
+--+   +-----+  +-----+            +--+----+  +--+----+
|id|   |data1|  |data1|            |id|data|  |id|data|
+--+   +-----+  +-----+            +--+----+  +--+----+
| 1|   |  aaa|  |  ccc|   <---     | 1| aaa|  | 1| ccc|
+--+   +-----+  +-----+            +--+----+  +--+----+
| 2|   |  bbb|  |  ddd|            | 2| bbb|  | 2| ddd|
+--+   +-----+  +-----+            +--+----+  +--+----+
| 1| 
+--+
| 2|
+--+ ←TABLE1のUNIQUEの制約は親テーブルのみに対してのみ

テーブルパーティショニングの手法として、縦割りの「多重継承」横割りの「CE(Constraint Exclusion)+RULE」という捉え方でいいのかな・・
 table1+table2=table3の場合を多重継承しtable2項目で検索をexplainで見てみましたが、table2だけを利用する訳ではありませんでした



今調査中のこと、、
(4)多重継承の際のPrimary制約の伝わり方
(5)ALTER TABLE で INHERITS句が用意されているがデータはどうなるか

・mdbのリンクテーブルのフィールドの削除の方法・・
Tabledef.columns.Deleteメソッドは失敗する、、リンクテーブルの特定項目の削除はできない?参考資料
・継承で特定のフィールドを隠蔽することはできない?
| サーバー関連 | 12:38 | comments(0) | trackbacks(0) |









http://blog.jojo.jp/trackback/999496