我以这种方式实现了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,但我不喜欢将所有派生表列放在一个表中作为可空的方法。
谢谢!
答案 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 Architecture和Composable / Re-usable queries中讨论了这个问题。