A市要建立房屋监测数据库,A市有很多个房子,房子的属性有地址,建成年份,每个房子由多个梁柱构件组成,梁柱的属性有长,宽,高,混凝土强度,钢筋型号和配筋率,每个房子有多个监测报告,报告的属性有监测年份,监测单位,在每份监测报告中,对应于这个房子的每个部位有一个监测结果,结果包括:开裂情况,钢筋腐蚀情况。如何进行建模?
抽象出来也就是关系A有两个外键B和C,AB,AC都是n对1的,而B和C有一个公共外键D,BD和CD都是n对1.
这样在对A进行insert/update的时候还需要判断选择的B和C是否对应于同一个D,如何改变关系模式才能避免做这种判断?
如果是使用关系型数据库设计的话,可以列出以下四个实体:
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
了。