为Django网络应用选择合适的数据库系统
我现在正在计划建立一个简单的Django网页应用(主要是为了学习)。基本上,老师可以登录,输入学生的成绩,然后学生也可以登录查看自己的成绩。每个班级都有一个组号。
这是一个用户的模板:
Username: Johny098
Password: Y98uj*?877!(
Name: John Doe
Gender: Male
Group: 32
Secondary: 5
考虑到我刚开始学习Django和网页开发,我发现有很多数据库系统让我感到困惑,比如MySQL、CouchDB、MongoDB、SQLite等等。我很难决定用哪个数据库系统,因为我之前没有使用过数据库的经验。
经过一些研究,我发现CouchDB(和SQLite)似乎比较简单,而且使用起来也很有趣,但这只是我的感觉,所以我需要帮助。我知道关于SQL和NoSQL有很多争论,但我不太清楚这对我使用数据库会有什么影响。理想情况下,数据库系统应该能很好地与Django集成,并且在几天内就能学会。
所以,回到问题:我应该为我的网页应用选择哪个数据库系统呢?
如果有任何资源推荐也非常感谢。
谢谢,
-Raphael
3 个回答
我会选择MySQL……为什么呢?因为在你提到的那些数据库中,它是最受欢迎的。而且,更重要的是,掌握MySQL在找工作时会给你带来更多的优势(比如,你可以去monster.com看看,有多少工作要求你会MySQL,和有多少工作要求你会SQL-Lite相比)。
另外,MySQL简单易学,还有很多图形界面的客户端(其中一些是开源的),而且它的文档也相当不错。
如果你是为了学习,我推荐使用SQLite:它不需要任何设置,也没有后台程序在运行,所有东西都和Python捆绑在一起,它是SQL格式的(所以和Django的ORM很好配合),而且它是一个非常简单的数据库管理系统。实际上,有些人会先用SQLite来做原型,然后在正式环境中换成MySQL或PostgreSQL。
至于NoSQL,我不建议你使用,除非你非常清楚自己为什么需要它,以及用来做什么。
哦,还有最后一点:存储密码时要用密码哈希(比如md5或sha1),而不是直接存原始密码。虽然在你的情况下可能不是必须的,但在实际应用中这是必须的。
Django官网上有一个页面,列出了支持的数据库类型。不过,Django的数据库访问层设计得差不多无论你用哪个数据库类型都能正常工作。虽然我链接的页面上有一些不同之处,但如果你只是写一个基本的网页应用,这些差异一般不会影响到你。所以在你写网页应用时,选择哪个数据库其实并没有太大关系。
需要注意的是,Django支持的所有数据库类型都是基于SQL的。我认为,通过Django访问数据库可以避免一些安全问题,这也是为什么会有NoSQL这种数据库类型的原因……不过现在你可以暂时忽略NoSQL。
就你的情况来说,我建议你选择SQLite,因为它更容易设置。你不想花时间去担心如何配置数据库,而是应该专注于如何构建你的网页应用。SQLite和大多数其他数据库管理系统(DBMS)之间的区别在于,SQLite把每个数据库存储在一个普通文件中,SQLite客户端直接和这个文件打交道。而其他的DBMS(比如MySQL、PostgreSQL、Oracle等)则有一个集中管理数据库的服务器,客户端通过这个服务器来处理所有的数据库访问。基于服务器的DBMS适合繁忙的网页应用,因为它有处理多个同时请求的功能,但由于你只是做一个学习项目,所以这些功能对你来说并不必要。