数据库关系模式建模
A市要建立房屋监测数据库,A市有很多个房子,房子的属性有地址,建成年份,每个房子由多个梁柱构件组成,梁柱的属性有长,宽,高,混凝土强度,钢筋型号和配筋率,每个房子有多个监测报告,报告的属性有监测年份,监测单位,在每份监测报告中,对应于这个房子的每个部位有一个监测结果,结果包括:开裂情况,钢筋腐蚀情况。如何进行建模?
抽象出来也就是关系A有两个外键B和C,AB,AC都是n对1的,而B和C有一个公共外键D,BD和CD都是n对1.
这样在对A进行insert/update的时候还需要判断选择的B和C是否对应于同一个D,如何改变关系模式才能避免做这种判断?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果是使用关系型数据库设计的话,可以列出以下四个实体:
1.
A
-房子{id, address, year}
2.
B
-梁柱{id, house_id, length, width, height, streghth, type, ratio}
3.
C
-报告{id, house_id, year, department}
4.
D
-监测结果{id, report_id, beam_id, crack, corrosion}
此时,
A
对B,C
而言是1 对 n
,BD
和CD
都是1 对 n
。进行insert/update
操作无需进行判断。但对 D 进行增改操作时,要进行 validation。我认为可以改为:
1.
A
-房子{id, address, year}
2.
B
-梁柱{id, house_id, monitor_id, length, width, height, streghth, type, ratio, crack, corrosion}
3.
C
-报告{id, house_id, year, department}
4.
D
-监测结果{id, report_id}
但是此时,梁柱和监测结果的对应关系有问题。所以我暂时也想不出来能免除判断的好的关系结构了。关注这个问题。
但是,如果可以使用
Nosql
的话,这个问题就好办多了。以mongo
为例,可以直接设计一个名为house
的collection
:再设计一个名为
report
的collection
:此时插入监测报告的话,应该就不需要
validation
了。house (房子)
component (构件)
component.house_id 外键关联至 house.house_id
report (房屋监测报告)
report.house_id 外键关联至 house.house_id
report_component (构件监测报告)
report_component.report_id 外键关联至 report.report_id
report_component.component_id 外键关联至 component.component_id
house <-> component: 一对多
house <-> report: 一对多
report <-> report_component: 一对多
所有外键都不允许级联删除
只有插入report_component的时候需要检查component_id是否合法,这个逻辑放到程序里面去检查即可
其它的数据有效性交给外键关联来负责即可