这两天设计了有关文章管理的数据表。
需要有给文章打标签,点赞,举报的功能。
开始设计
刚开始的时候,是这样设计的。
create table like(
articleID,
userID
)
当我这样设计的时候,就已经判定了点赞这个功能只是为了文章进行设定的。
当我需要给其它的数据进行点赞的时候,是不是还需要一个like表来进行存储信息呢?
在设计的时候,先进行判断当前存储数据的这个表是存储的通用性的数据还是一个特定的数据。
分清楚了这一点之后,再进行设计数据表就会好很多。
重新设计
create table like(
userID,
targetID,
targetType
)
点赞是个通用性的功能,只要是呈现给用户看的东西,都可以被点赞,都可以用来进行用户的交互。因此,在设计的时候,需要考虑到通用性。
其他的想法
当我进行设计的时候,还遇到了一个问题。
就是什么样的功能应该在你的设计中出现,什么样的功能不应该出现。
该出现的东西没出现,这叫做考虑不周。
不该出现的东西出现了,这叫过度设计。
这个时候就要区分,通用性和独特性了。
很多的内容网站都用到了基于用户投票的排名算法。
当我在看到这个功能的时候,将这个也考虑在内了。
因为我觉得我们要做的也是这样的内容管理的网站。
但是这个时候,BOSS指出我这算是过度设计了。
因为我们现在是没有这样的需求,点赞这个功能不仅仅是我们文章需要的,如果以后出现了一个叫做“活动”的数据表,也需要点赞呢?
通用的功能就需要有通用性的设计,独特的东西就应该将其提取出来。
不过问题来了,我现在是在一个特定的需求下,要设计出一个数据库结构,设计也可以满足当前的数据需求,但是没有通用性。
我加了一个基于用户投票的方式排名的功能,就是过度设计了。
这之间是有一个度的,至于怎样能够很明确的区分开,我还没有一个很好的想法。
BOSS说,牛逼的代码是看起来平淡无奇,所有的功能都可以实现,你也可以轻易的看懂,但是,让你自己写,你就是写不出来。
(为什么会想到这句话呢,我也好奇怪啊!好像跟今天写的内容没什么关系)