2013-10-11 126 views
4

我已經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) 

是否有可能用油滑創造一流的模型,其中三角延伸的部分和圓延伸的部分?

我看到this question,但我不喜歡這樣一種方法,即所有派生表列都可以將一個表放置爲可爲空。

謝謝!

回答

4

Slick是一個關係型/函數庫。它本身不映射繼承。我們談論如何做Inheritance with Slick in our Scala Days 2013 talk。我們描述你如何在Single Table Inheritance中完成,就像在你引用的文章中一樣。對於Class Table Inheritance(這似乎是你想要的),我們建議使用關係來代替在Slick中對它進行建模。不要以爲「一個圓形是一種形狀」,你會認爲「圓形是一種形狀可以發揮的作用」。你必須自己保證一定的限制。例如,一個形狀不是同時是一個圓和一個三角形。您可以將映射邏輯和約束驗證隱藏在api後面,您可以將其添加到DAO中。當你離開Slick的關係模式時,你會失去查詢的可組合性(反正你在JPA中沒有這些)。我們在Suggested Slick App ArchitectureComposable/Re-usable queries中討論這個問題。

+0

所有parleys鏈接都已死,無法在youtube上找到 – Intracer