2016-09-22 5 views
2

使用する参照:PostgreSQL - OOPの継承をモデリングするために参照の代わりにINHERITSを使うことの長所と短所はありますか?

CREATE TABLE Users (
    id  int  primary key, 
    name  text 
); 

CREATE TABLE Moderators (
    role  int, 
    userid int references Users(id) 
); 

使用して継承します。クエリ構文の違いのほかに

CREATE TABLE Users (
    id  int  primary key, 
    name  text 
); 

CREATE TABLE Moderators (
    role  int 
) INHERITS (Users); 

、それら二つのいずれかのパフォーマンスの違い、拡張性はありますか?

+1

はい違いはありますが、クエリの種類によって最適です。参照を使用すると、モデレータのデータが2つのテーブルに分割されるという欠点があります。しかし、利点は、すべての基本的なユーザー情報が単一のテーブルにあることです。継承では、モデレータのすべてのデータが単一のテーブルにあり、Usersテーブルには通常のユーザーしか含まれていません。個人的に私は単一のクラスのユーザーでデザインを使用し、これらのユーザーに個人権限を与えます。 – Eelke

答えて

2

PostgreSQLの継承はかなり古いです。最近、PostgreSQLはリレーションデータベースであり、OOPデータベースではありません。

あなたのモデルがOOPのみの場合、不要なアーティファクトには触れないかもしれませんが、両方のモデルをミックスしてみると、いくつかの問題に触れることができます - 継承は参照整合性制約によってうまくサポートされません。いくつかの他の問題を見つけることができます。 OOPの方法は使用されておらず、好まれていません。これは単なる歴史的な人工物です。

関連する問題