系统设计之 数据库设计相关扫盲

最近工作中需要设计一整套系统,其包括 B/S形式的WEB服务、数据库等,而且包括要设计应用层私有通信协议的C/S的结构的程序模块,涉及到与外界数据库交互、与外界模块交互。

由于我实在是设计上的小白,也对数据库、WEB这块事基本不太懂,在自己大体上对整套系统划分模块之后,对于系统与数据库交互,或者系统内部数据库建设方式存在很多疑惑点。

于是我怀着好奇心,和我公司一DB专家聊了一小会。受益匪浅!现在总结一下心得。

应用层与数据库的交互权限控制的设计上一般分为两种形式:

1. 库端:即在数据库中分配用户权限,不同的应用使用不同的用户名与数据库进行交互。这样的方式适合于能很明确的划分且固定权限的各个模块。

2. 应用层:数据库给一个应用(主模块)分配一定权限,然后该应用提供一套API,自己封装对数据库的一些操作。可以由其他应用调用。这种方式适合于经常需要变化权限的副模块(副用户)

系统设计初期尽量使用一个数据库:(这里指逻辑上)

除非非常确定两个库完全没有交集,可以在设计上就将它分离,作为不同的数据库。否则,可以在系统设计初期可以将整个系统的数据库完全使用一个,整体配置权限、建表。因为即使之后需要分离,也非常简单。若初期设计上就逻辑分离,那么在后期很可能需要交叉的时候带来更大的麻烦。

关于数据库集群:

oracle和mysql都提供数据库集群。

集群也大体分两种:1.相当于负载均衡(性能) 2.相当于备份(安全)

在数据库设计的时候,中小规模可以完全不考虑存储空间。(若不够,加硬盘就是了。)即使大规模数据库需要考虑存储空间问题,数据库厂商有极多的成熟的解决方案,不需要自己考虑。。

数据库集群和一个分布式系统基本类似,采用统一对外的网关服务器,机器之间走网线心跳通信等,走光纤(需要的话)传数据。——这里都是数据库厂商研究的事情了,也是有很多成熟方案。

MYSQL未必比ORACLE差,即使现在看来,用MYSQL也未必是不专业的表现。

最后,

相当感谢我们的DB专家孔哥,为我耐心的扫盲~

你可能感兴趣的:(数据库设计)