问一个设计题# JobHunting - 待字闺中
P*d
1 楼
今天我有朋友被问了一个设计题,发上来讨论一下,数据库有两个表,表A和表B,表B
继承表A,表A和表B有一个共同的属性X。比如表A有一个A1,他包含3个B, B1, B2,
B3。如果B1,B2,B3的属性X都是X1,那么相当于浪费了存储空间,然后应该做的操作
就是把B1,B2,B3里的X1删除,然后在A1那里MARK一个X1,因为B继承A,所以A有属性
X1,代表B1,B2,B3的X属性都是X1
然后问题是,如果UPDATE DATABASE的JOB一直在RUN,SERVICE也是一直LIVE,这个操作
可能导致什么潜在问题。用户API可以同时修改表A的属性X和表B的属性X
我朋友想到的一个ISSUE,是如果我们把B1,B2,B3的X1 PROMOTE到A1,那么如果用户
突然只想删除B1中的X1,那么要重新做一个操作,就是修改API,让这个删除先CHECK是
不是B1,B2,B3的属性是不是已经被PROMOTE到了A1中,如果PROMOTE了,那么删除操作
要改成先删除A1中的X1,然后将X1只添加到B2和B3中。因为原删除操作只删除B1中的X1
,这个操作会无效,因为删除B1中的X属性会发现里面没有值,不做任何操作,但是A1
中的X是X1,会AUTOMATICALLY APPLY到B1中
面试官说这个想法很好,问他还有什么ISSUE要注意,最后想一个完备的PROMOTE算法出
来,但是他想不出其他还要注意的地方了。最后估计FAIL了
板上大牛有什么高见么?
继承表A,表A和表B有一个共同的属性X。比如表A有一个A1,他包含3个B, B1, B2,
B3。如果B1,B2,B3的属性X都是X1,那么相当于浪费了存储空间,然后应该做的操作
就是把B1,B2,B3里的X1删除,然后在A1那里MARK一个X1,因为B继承A,所以A有属性
X1,代表B1,B2,B3的X属性都是X1
然后问题是,如果UPDATE DATABASE的JOB一直在RUN,SERVICE也是一直LIVE,这个操作
可能导致什么潜在问题。用户API可以同时修改表A的属性X和表B的属性X
我朋友想到的一个ISSUE,是如果我们把B1,B2,B3的X1 PROMOTE到A1,那么如果用户
突然只想删除B1中的X1,那么要重新做一个操作,就是修改API,让这个删除先CHECK是
不是B1,B2,B3的属性是不是已经被PROMOTE到了A1中,如果PROMOTE了,那么删除操作
要改成先删除A1中的X1,然后将X1只添加到B2和B3中。因为原删除操作只删除B1中的X1
,这个操作会无效,因为删除B1中的X属性会发现里面没有值,不做任何操作,但是A1
中的X是X1,会AUTOMATICALLY APPLY到B1中
面试官说这个想法很好,问他还有什么ISSUE要注意,最后想一个完备的PROMOTE算法出
来,但是他想不出其他还要注意的地方了。最后估计FAIL了
板上大牛有什么高见么?