django 声称图表

在宣传MongoDB时,MongoDB的论点之一是MongoDB是“无模式”数据库 :

为什么没有模式?

MongoDB是JSON样式的数据存储。 存储在数据库中的文档可以具有不同的字段集,每个字段具有不同的类型。

没错 但这并不意味着没有架构。 实际上有多种模式:

  • 设计数据结构时,一个人在脑海中
  • 数据库真正实现的一种用于存储数据结构的数据库
  • 应该已经实现的一种才能满足您的要求

每当您意识到自己犯了一个错误(请参阅上面的第三点)时,或者当您的需求发生变化时,就需要迁移数据。 让我们在这里再次回顾一下MongoDB的观点:

使用无模式数据库,对数据库的90%的时间调整将变得透明且自动。 例如,如果我们希望将GPA添加到学生对象,则添加属性,重新保存,一切都很好-如果我们查找现有的学生并引用GPA,则只返回null。 此外,如果我们回滚代码,那么如果我们的代码编写正确,则现有对象中的新GPA字段不太可能引起问题。

上面的一切都是正确的。

“无架构”与“全架构”

但是,让我们将其转换为SQL(或使用任何其他“ schema-ful”数据库):

ALTER TABLE student ADD gpa VARCHAR(10);

我们完成了! e,我们已经添加了一列,并将其添加到了所有行。 这是透明的。 这是自动的。 对于现有的学生,我们“只是回到零”。 我们甚至可以“回滚我们的代码”:

ALTER TABLE student DROP gpa;

现有对象不仅不大可能引起问题,而且实际上已经回滚了代码数据库。

让我们总结一下:

  • 我们可以在“无模式”数据库中做与在“全模式”数据库中做的完全相同的操作
  • 我们保证进行迁移(这也是即时的)
  • 回滚更改时,我们保证数据完整性

那更真实的DDL呢?

当然,在项目开始时,当它们仍然类似于典型的cat / dog / pet-shop,book / author / library示例应用程序时,我们将仅添加列。 但是,如果我们需要将学生与老师的1:N关系变成学生与老师的M:N关系,会发生什么? 突然,一切都改变了,关系数据模型不仅会证明远远优于仅产生大量数据重复的分层模型,而且迁移起来也将相当容易,并且保证结果是正确而整洁的!

CREATE TABLE student_to_teacher
AS
SELECT id AS student_id, teacher_id
FROM student;ALTER TABLE student DROP teacher_id;

……我们完成了! (当然,我们将添加约束和索引)

考虑一下将JSON转换为新JSON的繁琐任务。 您甚至没有XSLT或XQuery来完成任务,只有JavaScript!

面对现实吧

与NoSQL一样,无模式是一个误导性术语:

根据NoSQL的历史@markmadsen #strataconf pic.twitter.com/XHXMJsXHjV

— Edd Dumbill(@edd) 2013年11月12日

再说一次,MongoDB的博客文章讲的是事实(也是一个有趣的事实):

通常,这种“无模式”样式与动态类型化的语言之间存在直接的类比。 诸如此类的构造很容易用PHP,Python和Ruby表示。 我们在这里要做的是使到数据库的映射自然。

当您说“无模式”时,您实际上是在说“动态类型的模式” –与SQL数据库中可用的静态类型的模式相反。 与XML相对,JSON仍然是完全无模式的数据结构标准,而XML使您可以在需要时指定XSD,或在面向文档的“无模式”(即,动态类型)模式下运行。

(并且不要说存在json-schema 。这是模仿XSD的荒谬尝试)

了解这一点很重要! 即使您没有静态键入它,也总会有一个模式。 如果您正在编写JavaScript,则仍然有类型,您必须在代码的思维模型中充分了解这些类型。 除了没有编译器(或IDE)可以帮助您以100%确定性推断类型之外。

一个例子:

大声笑JavaScript:> null * 1 0> null == 0 false pic.twitter.com/Hc2NR2tsMP

— Lukas Eder(@lukaseder) 2014年10月15日

… 和更多:

因此,有绝对没有任何与除“schemaful”一“无模式”的数据库确实更容易。 您只是将清理模式的不可避免的工作推迟到了其他某个时间,或者您可能比今天更关心这个时间,或者您很幸运地找到了一份新工作,而其他人为您完成了工作。 您可能会相信MongoDB,当时他们说“对象不太可能引起问题”。

但是,让我告诉您一个丑陋的事实:

任何可能出错的事情都会

– 墨菲

我们希望您在使用动态类型的语言和动态类型的数据库架构时祝您好运,同时我们将坚持使用类型安全SQL。

翻译自: https://www.javacodegeeks.com/2014/10/stop-claiming-that-youre-using-a-schemaless-database.html

django 声称图表

django 声称图表_停止声称您正在使用无模式数据库相关推荐

  1. 《数据分析-Echarts》Python + Django + echarts图表展示

    Python + Django + echarts图表展示 项目打包文件 一.准备工作 ## 1.python环境安装 ## 2.python开发工具PyCharm安装 二.创建Django项目 三. ...

  2. MySQL数据库怎么查看er图表_详解 Navicat 查看方式之ER图表

    Navicat 在主窗口查看对象类型的方法有三种,分别是列表.详细信息.ER图表.默认情况下,Navicat 使用"列表"查看对象类型.这三种查看类型拥有不同的特点,本教程将详解 ...

  3. Django MTV 开发模式 + 数据库配置

    MTV 开发模式 Django 的设计鼓励松耦合及对应用程序中不同部分的严格分割.遵循这个理念的话,要想修改应用的某部分而不影响其它部分就比较容易了.在视图函数中,我们已经讨论了通过模板系统把业务逻辑 ...

  4. docker登录mysql数据库_从docker容器连接到远程MySQL数据库

    我正在努力将一个Django 1.5.x应用程序容器化,该应用程序通过ODBC连接到单独服务器上的 MySQL数据库: [mysql_default] database = DB_NAME drive ...

  5. 计算机毕业设计Python+django大学生闲置二手交易商城平台(源码+系统+mysql数据库+Lw文档)

    项目介绍 当前在市场经济的快速发展下,我国的经济形势也在不断的发展壮大.特别是在计算机信息化的普及下,新的互联网+业态促使着零售业在不断的转型发展.随着B2C.O2O的不断发展,传统的零售实体都受到了 ...

  6. stm32芯片休眠模式_STM32的运行、睡眠、停止和待机四种工作模式

    01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中, ...

  7. 如何使用爱奇艺下载视频_爱奇艺怎么设置青少年模式

    很多人都使用爱奇艺,播放器家园网小编给大家分享一下如何使用爱奇艺下载视频_爱奇艺怎么设置青少年模式相关内容.爱奇艺上看视频.请好友助力.每日签到-超多互动都可以得金币!更妙的是,金币可以兑换VIP影片 ...

  8. d3 制作条形图_停止制作常见的坏条形图的5个简单技巧

    d3 制作条形图 Bar charts were probably the first type of chart you were ever introduced to in first grade ...

  9. d3 制作条形图_停止错误制作条形图的5个技巧

    d3 制作条形图 Bar charts were probably the first type of chart you were ever introduced to in first grade ...

最新文章

  1. 【运筹学】表上作业法 ( 示例 | 使用 “ 闭回路法 “ 计算检验数判定最优解 )
  2. copy与mutableCopy的内存管理剖析
  3. [html] html元素哪些标签是不可替换元素?哪些是可替换元素?
  4. mindi linux 使用教程,Linux使用入门教程之tuned
  5. pythondev更新到3_python版本升级到3.7
  6. C++结构体传参问题
  7. 如何找出 Mac 上两个文档之间的差异?
  8. vue开发中v-for在Eslint的规则检查下出现:Elements in iteration expect to have 'v-bind:key' directives...
  9. MSDN官网下载_Win10 winServer 原版系统下载 纯净版
  10. SpringBoot项目中快速集成腾讯云短信服务SDK实现手机验证码功能
  11. PDF文件怎么编辑内容
  12. Linux重启 Redis自动启动
  13. 简述窄带与宽带信号的区别
  14. USACO16FEB:再探圆形谷仓(dp)
  15. The 9-th BIT Campus Programming F. 狂乱(背包)
  16. outlook电子邮件解析_在Outlook中按会话对电子邮件进行排序
  17. 磁盘分区管理工具(DiskGenius Pro 5.3)pjb 附安装教程
  18. Kerberos协议内容详解
  19. Debian10开启路由转发以及配置dhcp中继
  20. 日期格式化使用 YYYY-MM-dd 的潜在问题

热门文章

  1. promise解决回调地狱的问题
  2. 采用折中方法的计算机系统,计算机系统结构期末复习资料
  3. 【重要】一文带你读懂什么是docker
  4. 触宝AI助手“Talia”现身OPPO印度新机,TA的朋友圈实在不可想象!
  5. 中国第一个女程序员——张绮霞
  6. 逆向工程核心原理——消息钩取
  7. 要求在数组头部增添一个数字
  8. 消费服务平台“小黑鱼科技”完成5000万美金融资,资方含光速美国、晨兴资本等多家知名机构...
  9. JS计算日期天数之差
  10. From line 6, column 36 to line 6, column 71: Cannot apply ‘-‘ to arguments of type ‘<VARCHAR(214748