Scala Slick表继承

mto*_*omy 5 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)
Run Code Online (Sandbox Code Playgroud)

用光滑的方法可以创建三角扩展形状而圆扩展形状的类模型吗?

我看到了这个问题,但我不喜欢将所有派生表列都放在一个表中为可为空的方法。

谢谢!

cvo*_*ogt 3

Slick 是一个关系/函数库。它本身并不映射继承。我们在 Scala Days 2013 演讲中讨论了如何使用 Slick 进行继承。我们描述了如何进行单表继承,就像您引用的帖子中一样。对于类表继承(这似乎是您想要的),我们建议使用关系在 Slick 中对其进行建模。你不会认为“圆是一种形状”,而是会认为“圆是形状可以承担的角色”。您必须自己保证某些限制。例如,形状不能同时是圆形和三角形。您可以将映射逻辑和约束验证隐藏在 api 后面,然后将其添加到 DAO 中。当您离开 Slick 的关系模式时,您就会失去查询的可组合性(无论如何,在 JPA 等中都没有这种可组合性)。我们在建议的 Slick 应用程序架构可组合/可重用查询中讨论了这一点。