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)

是否可以使用 slick 创建 Triangle 扩展 Shape 和 Circle 扩展 Shape 的类模型?

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

谢谢!

4

1 回答 1

3

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

于 2013-10-11T09:00:46.127 回答