请教一个数据结构的问题
有3个表 user 用户表 article 文章表 reward 打赏表 打赏表记录打赏的记录,打赏分两个类型,可以打赏用户,也可以打赏文章。 打赏表的数据结构有两种设计方式如下: A:
//类型
// 1:打赏用户
// 2:打赏文章
type:{
type:String,
index:true,
},
//来源 ID
// type 是1 时值指向 user 表
// type 是 2 时值指向 article 表
source:{
type:Schema.Types.ObjectId,
index:true,
},
//打赏次数
num:{
type:Number,
},
//打赏金额
money:{
type:Number,
}
B:
//类型
// 1:打赏用户
// 2:打赏文章
type:{
type:String,
index:true,
},
//用户ID
user_id:{
type:Schema.Types.ObjectId,
index:true,
},
//文章ID
article_id:{
type:Schema.Types.ObjectId,
index:true,
},
//打赏次数
num:{
type:Number,
},
//打赏金额
money:{
type:Number,
}
想请教下,哪个方案更合理些,或者还有别的方案,谢谢。
8 回复
@285858315 我有两个问题 第一、如果是第一种方案,你的用户编号不能与文章编号重复,否则就失去合在一起的意义。合在一起的意义是从用户、文章找打赏时可以少做一次来源判断。 第二、如果使用第二种方案,我认为来type使用去意义,两个字段中可以使用空来区分来源。
我不太懂nosql技术,我用sql的角度来考虑这个问题得出的结论是: 第一种方案没有主键,第二种方案是组合主键。
根据建模三大范式,我的建议是这样的: id:主键 sourceid:用户编号、文章编号 type:来源
说得不对,请指教