5

この方法で SQL テーブルの継承を実装しました。

Table Shape:
   Column   |  Type  
------------+---------
 shape_id   | integer
 square     | foat 
 name       | character varying(64)

Table Triangle
   Column   |  Type
------------+---------
 shape_id   | integer
 a          | float
 b          | float
 c          | float
Foreign-key constraints:
    "fkey1" FOREIGN KEY (shape_id) REFERENCES Shape(shape_id)

Table Circle
   Column   |  Type
------------+---------
 shape_id   | integer
 r          | float
Foreign-key constraints:
    "fkey2" FOREIGN KEY (shape_id) REFERENCES Shape(shape_id)

Triangle が Shape を拡張し、Circle が Shape を拡張するクラスモデルを作成することは可能ですか?

この質問を見ましたが、すべての派生テーブルの列が 1 つのテーブルに null 許容として配置されるアプローチは好きではありません。

ありがとうございました!

4

1 に答える 1

3

Slick はリレーショナル/機能ライブラリです。継承自体はマップしません。Scala Days 2013 トーク で、Slick を使用して継承を行う方法について説明します。参照した投稿と同じように、単一テーブルの継承を行う方法について説明します。クラステーブルの継承について(これはあなたが望んでいるようです)代わりにリレーションシップを使用して Slick でモデル化することをお勧めします。「円は形」ではなく、「円は形が担う役割」と考えてください。特定の制約を自分で保証する必要があります。たとえば、形は同時に円と三角形ではありません。DAO に追加できる API の背後にあるマッピング ロジックと制約検証を非表示にすることができます。Slick のリレーショナル モードを終了すると、クエリの構成可能性が失われます (JPA などにはありません)。これについては、推奨される洗練されたアプリ アーキテクチャコンポーザブル/再利用可能なクエリで説明します。

于 2013-10-11T09:00:46.127 に答える