目前在做一个新闻网站,在数据库方面有点疑惑:比如有A、B、C三个城市,那我数据库该如何设计。
目前是有两个设计思路:(1)以城市为单位建立数据库,一个城市是一个数据库。这样做的好处是,每个库中存放记录的单个表的数据量会减小,提高检索效率;一个城市的数据表被破坏,其它城市不受影响。但同时也有问题,当要检索全部城市的新闻时,需要跨库检索,存在效率和安全隐患。
                      (2)建立一个数据库,按城市id来保存记录。这样做的好处是,取数据很方便,不需要跨库查询,效率问题可以进行优化。缺点是会造成单个表的数据量过大,同时如果表被破坏,所有城市的访问都会受到影响。
以上是两个设计思路,希望做过类似项目的朋友,能多提高宝贵建议,希望大家多讨论。

解决方案 »

  1.   

    建议用mysql5.5,
    一个库,按时间分区。
    每个城市一个表。或者每天一个表。
      

  2.   

    我有的同事认为“一个城市的数据表被破坏,其它城市不受影响。”很重要,他被sql注入害苦了,不知道高手们对这个问题怎么看?
      

  3.   

    实际上,图片如何处理?也入库否?这个也挺重要
    对于mysql的应用来说一般都是不入库,库中存图片链接,而用php调用系统文件。
    假如想入库,用select 等对图片操作,又想存储目录中,库中只存链接这样。建议用sql2008File Stream=中文名称叫文件流,是sqlserver的一种数据类型。
    因为我们知道在生活中我们有很多多媒体的数据,比如说我以前一个项目叫中国的气象卫星他们拍摄了很多照片,这些照片可能几十兆几百兆的数据量,如果你直接用SQL Server本身的数据类型去存储这么大的数据量的话就非常的差,比较好的方式你就用文件系统,存成一个文件,然后再用文件系统的方式去调用。但是如果你存成一个文件系统的话,那么你的应用程序就非常难写,因为你没办法用SQL Server里面的一些T-SQL应用程序去开发这些东西,2008版本里面我们就引进了一个数据类型叫
    Varbinary Max,2G大小的文件,它的存储方式是以文件系统的存储来存储的,但是你又可以用T-SQL的一些应用来调用这些数据类型,所以就非常方便,