我在Quota上问过(How do I implement a MySQL inheritance relations with a Node.js database ORM (like sequelizejs)?),再这里重发一下,求有经验的各位指导下:
大体是这样的,最近在写个项目,做了下简单的表设计,其中的部分如下:
(其中三个表共享id,id即是外键)之所以想这么弄的原因是,这个项目的内容主体是project
(不在上图中),而一个项目可以属于一个app
也可以属于user
,为了统一,我希望每个项目都有一个唯一全局的名称namespace/project_name
,为了这个目的,我把app
和user
抽象出一个父类,也就是owner
(或者直接换成namespace也可以),而且这样后续我通过这个唯一的项目名称查询的时候也不需要预先做判断这个namespace
是应用还是用户。
但是在常见的这些 ORM 库中没有找到支持这么做的API,但是我又觉得这样得设计应该不是很少见,所以想知道大家一般是怎么处理的。
实际上,你觉得这是「继承」关系,但本质上是「一对一单向映射」而已,所以只要用 Sequelize 的 hasOne 来建立联系即可:
App.hasOne Owner
User.hasOne Owner
app_or_user.getOwner().then (owner) ->
console.log owner.name
另外难道不是应该去 StackOverflow 么,去 Quota 干嘛。