Scala Slick表继承

时间:2013-10-11 02:14:35

标签: scala slick

我以这种方式实现了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?

我看到this question,但我不喜欢将所有派生表列放在一个表中作为可空的方法。

谢谢!

1 个答案:

答案 0 :(得分: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中讨论了这个问题。