【MongoDB】从入门到放弃 - 学生信息管理系统(一)

天锦 发表于 码农也得有格调 分类,标签:


写在前面

最近我的辅导员向我抱怨学校经常要求老师们对学生做一些信息统计的工作,每次统计的信息又都有所差异,而且涉及到学生的信息,有要保护好信息不能被其他同学看到(泄露),而现有的学工系统又是从程序上就是写死的,想利用现有工具是基本无望,采集一次信息就像一场战役一样……

正好最近在学习MongoDB,对于常见的学工系统的数据库相比,MongoDB是一种非结构化的(NoSQL)数据库,与传统结构化的数据库表结构严格规定不同的是,MongoDB对数据表的结构没有要求,正适合学生多元发展是出现的信息相同性低的情况。例如A学生可能是贫困生,他的信息中会有贫困认定等级等相关信息,而B生学习较好,经常参加比赛,那么他的信息中定会出现相关的比赛获奖信息,每个学生的信息结构都会不同,如果按照传统的数据库系统设计系统解决问题时,只能尽可能的想到学生都会有什么信息,全部设计到数据库中,数据表中的键动辄就能达到几百甚至几千个,而且总有意料不到的信息会考虑不到,歇菜!而MongoDB可以随时向表中添加新的键值。发现了MongoDB这一好处是,随即准备拿MongoDB作为数据库系统写一个学生信息管理的系统,也算是练手(入门)MongoDB了。

数据库系统选定之后就是确定应用的平台了,我选的是PHP语言以网站的形式进行开发,ThinkPHP5作为框架,因为ThinkPHP对MongoDB有所支持。

接触MongoDB

第一步肯定是安装,但是安装数据库系统属于运维范畴,为尽早写出系统,救辅导员于水深火热之中(ε=ε=ε=┏(゜ロ゜;)┛),我用了宝塔Linux面板提供的一键安装,先就此跳过安装,不熟悉Linux系统亦或是想尽早上手MongoDB的同学可以到MangoLab上注册一个账号,有500M空间的免费MongoDB提供使用。

两个用着比较舒服的MongoDB数据库工具建议下载Studio 3T和 Robot 3T(为啥他俩都跟“3T”过不去?ε=ε=ε=┏(゜ロ゜;)┛)个人使用中没发现什么大的区别在二者中,但是Studio3T是收费的,目前没别的了……

连接数据库跟使用Navicat没啥不同,输入数据库地址跟端口号连接就行。

------更新------

使用宝塔进行本地安装的是没有用户和密码的,输入IP跟端口就能连接的,连接不上时注意检查MongoDB监听的端口是127.0.0.1还是你的网卡IP,没有监听正确的IP是连接不上的。另外出于安全问题的考虑,一定要设置用户和密码!!前些天三方刷票工具泄露12306账户不就是因为这个么((lll¬ω¬)),使用带用户名和密码的连接时要在Authentication中填写用户名和密码,记得填写认证的数据库名,不填写数据库名是过不了认证,连接不上的。

----------------

叫法不一样

因为MongoDB不同于传统的结构化数据库,所以叫法也不一样。

【MongoDB】文档(Document)---->  【MySQL】行(Row)

文档是 MongoDB 中数据的基本单位,类似于关系数据库中的行(但是比行复杂)。多个键及其关联的值有序地放在一起就构成了文档。文档的一个键可以对应一个值或是多个值(数组),也可以对应一个拥有多个键/值对的对象(或者说另一个文档)文档中的值不仅可以是双引号中的字符串,也可以是其他的数据类型,例如,整型、布尔型等,也可以是另外一个文档,即文档可以嵌套。文档中的键类型只能是字符串。

【MongoDB】集合(Collection)---->  【MySQL】表(Table)

集合就是一组文档,类似于关系数据库中的表。集合是无模式的,集合中的文档可以是各式各样的。

【MongoDB】数据库(DataBase)---->  【MySQL】数据库(DataBase)

数据库两者没有多大的区别,基本相似。


综上,最难理解的还是文档,因为文档可以嵌套文档,文档之间可以没有相关性,在MySQL中每一行中的键与值要一一对应。简明扼要的看图:

robot3t.PNG

与MongoDB的初识先告一段落,接下来将进行ThinkPHP与MongDB的联合使用

0 篇评论

发表我的评论