关系型数据库和非关系型数据库区别 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1yndonn3u
V2EX    NoSQL

关系型数据库和非关系型数据库区别

  •  
  •   1yndonn3u 2015-11-23 11:49:59 +08:00 18305 次点击
    这是一个创建于 3660 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位
    谁能通俗的帮我解释下什么是关系型数据库,什么是非关系型数据库?
    网上的文章虽然很多,但都特别的书本化,有没有通俗一些的对比,比如图解什么的。
    或者很简单的解释下,谢谢啦。
    很长时间没看明白

    20 条回复    2015-11-26 10:18:41 +08:00
    wy315700
        1
    wy315700  
       2015-11-23 11:52:57 +08:00   1
    事实上很多人把关系型数据库当非关系型数据库来用
    hooopo
        2
    hooopo  
       2015-11-23 11:58:02 +08:00
    用 SQL vs 不用 SQL
    matrix67
        3
    matrix67  
       2015-11-23 11:59:15 +08:00 via Android
    一张表,一个是字典吧
    zjqzxc
        4
    zjqzxc  
       2015-11-23 12:02:03 +08:00
    个人看法:(最初的)非关系型数据库就是没有达到关系型数据库要求(例如 ACID)的数据库

    现在很多 NoSQL 也慢慢支持了一些关系型数据库的要求,所以他们两者在进行一些简单应用的时候并不是“天壤之别”。在使用中都能对指定字段存储指定的数据,关系型数据库中那些复杂的东西一概不碰(这就是 @wy315700 说的很多人把关系型当非关系型来用)
    syhilyhw
        5
    syhilyhw  
       2015-11-23 12:38:35 +08:00
    sql 和 nosql 了,自己做之类的项目时,就会有体会啦。
    wizardforcel
        6
    wizardforcel  
       2015-11-23 12:40:34 +08:00 via Android
    关系型存的是 table 非关系型存的是 object
    2hf
        7
    2hf  
       2015-11-23 12:54:22 +08:00
    找本 nosql 的书看下,比如 redis in action ,其中有个对别的列表,大同小异,看书自己总结岂不是更好咩=。=
    g00001
        8
    g00001  
       2015-11-23 13:03:14 +08:00
    sql 一般是先创建表设计好数据的结构和相互之间的关系,存储固定格式的数据,使用支持条件查询的 SQL 语句。 nosql 就反之数据更松散灵活存储的数据没有固定的格式,直接用代码更容易看出其区别。

    典型的例如操作 sqlite 的代码( aardio 代码 )
    import sqlite;
    var db = sqlite("/sqlite.db") //创建数据库
    db.exec("CREATE TABLE IF NOT EXISTS [film](title);")//创建表
    db.exec("REPLACE INTO film VALUES ('title')") //增加数据
    for rowid,title in db.each("SELECT rowid,* FROM film WHERE title LIKE '%t%'") {
    console.log( rowid,title, length, year, starring ) //查询数据
    }

    操作 unsqlite 的代码则不需要使用 SQL 语句,用 JSON 就可以,例如( aardio 代码 ):
    import unqlite;
    var udb = unqlite("/unqlite.db");// 创建数据库
    udb.storeObject("jsonObject",{ name = "测试"; 随便搞="随便随便"} ) // 存储 json 数据
    udb.fetchObject("jsonObject",function( value ){
    console.dumpJson( value ) // 查询 json 数据
    } )
    fasling
        9
    fasling  
       2015-11-23 13:20:58 +08:00
    关系数据库操作的基本单位是集合.
    这么说其实也特别市书本化...
    thinkif
        10
    thinkif  
       2015-11-23 14:18:15 +08:00
    直观的说:

    关系数据库你可以理解为是一个包含了很多 sheet 的 excel 文件,里面有很多表,每个表有列有行。

    非关系型数据库你就把它想成一个文件夹放很多 ini 或者 conf 文件,每个文件是个对象,里面有它的属性和内容。

    (这只是一种类比,实际上并不是这样,但是你这样想就比较好理解)
    SilentDepth
        11
    SilentDepth  
       2015-11-23 14:30:15 +08:00
    非专业解释
    「数据库」不解释了。
    「关系型」:盒子 A 是装胳膊的,盒子 L 是装腿的,盒子 H 是装头的,还有装梯子的、装板凳的、装肥皂的……要想拼出一个人,得先知道哪些盒子是拼人需要的,然后还要知道这些盒子分别对应什么部位,然后从各个盒子里找出符合条件的零件出来。
    「非关系型」:仓库 D 是装狗的,仓库 C 是装樱桃的,仓库 P 是装人的……唉!你怎么长这么高啊,那你站天窗下边吧,至少有地方放你的脑袋了。

    PS: 是不是太抽象了……
    chadliuxc
        12
    chadliuxc  
       2015-11-23 15:15:49 +08:00
    楼上说的挺形象,哈哈。不过楼主用过关系数据库吗, SQL Server , MySQL , Oracle 啥都成,如果没用过,就不好解释了。如果接触过。看一下 Martin Fowler 的 NoSQL 精粹,就 100 多页。基本上就啥都明白了。
    GuangXiN
        13
    GuangXiN  
       2015-11-23 16:08:19 +08:00   1
    简单来说区别在于数据库软件是否负责维护数据间的关系。

    关系型数据库是依照实体-关系模型建立起来的,它包括两个部分:一是数据库部分,负责数据的保存和索引,让你完成增删改查操作;另一个是关系部分,利用数据表把数据按行的形式组织起来,检查每个字段的数据类型、长度甚至取值范围,利用外键约束数据表之间的关系,利用事务机制确保数据库操作的 ACID 特性。

    非关系型数据库全部或者部分放弃了实体-关系模型,它们只负责保存数据,并不组织数据表,也不约束表间关系,关系的部分交由开发人员自己来完成。比如 MongoDB 用 JSON 序列化的方式保存数据,虽然也有表的概念,但是结构可以随时扩展调整,而无需更新既有数据。比如 LevelDB 是一个 Key-Value 数据库,重视写入性能而非读取性能。 Redis 提供了 Key-Value 、 List 、 Set 、 Sorted Set 等多种数据结构模型。 Cassandra 则使用面向列的数据模型。

    关系型数据库设计之初是为了给国防、金融、政府及企业管理使用,对数据一致性要求极高,再加上当年存储成本高昂,业界努力的方向也是确保事务安全和减少数据冗余。实体-关系模型提供了简单易学、健壮可靠,相对通用的软件数据建模方法,自然成为各种数据库软件的基础模型。非关系型数据库早就存在,但是因为缺乏必要的数据一致性保障而未能流行。直到 SNS 时代,社交网络应用对数据的一致性要求相对较低,对数据处理的实时性要求和大并发处理能力方面的要求非常高。通过放弃一致性检查和事务机制,非关系型数据库一般比关系型数据库拥有更好的性能,而且也不局限于实体-关系模型,能有更灵活的数据模型和操作方式供开发人员使用。

    未来的趋势是两者结合, PostgreSQL 作为老牌的 RDBMS 开始供 JSON 等更灵活的数据字段, Redis 等典型的 NoSQL 系统也开始提供 atom 操作接口。

    不存在哪种数据库更好,请按自己的实际业务场景结合起来使用。
    blank4me
        14
    blank4me  
       2015-11-23 16:24:29 +08:00
    我的理解是,关系型是倾向于范式化,非关系型是倾向于反范式化的。
    glogo
        15
    glogo  
       2015-11-23 16:38:08 +08:00
    这种应该上升到高大上的理论的东西去找写 paper 或者 CS 、数据库的书看下比较透彻,然后再回过头来看实际问题,比较好个人体会
    sunchen
        16
    sunchen  
       2015-11-23 16:48:20 +08:00
    @blank4me 所以使用关系型数据库做反范式化的能力很重要
    lwbjing
        17
    lwbjing  
       2015-11-23 16:52:06 +08:00
    为了 mongo 的自增,还特意再开个集合来记录... 我是不是用的姿势不对? ORZ...
    1yndonn3u
        18
    1yndonn3u  
    OP
       2015-11-23 17:00:25 +08:00
    其实我 oracle 和 mongodb 都用过,但是紧紧用过...
    SilentDepth
        19
    SilentDepth  
       2015-11-25 14:32:43 +08:00   1
    @lyndonneu18 把数据库想象成一个箱子。你往 Oracle 型箱子放东西前必须用盒子装起来(盒子即是表),而且规定了一个盒子里只能放规格一致的东西(表中的记录都拥有相同的字段)。你往 MongoDB 型箱子放东西时就没那么多限制了,只管放就行了,怕太乱就也用盒子装起来(盒子即是集合),但没有规格一致的限制(集合中的记录可以有不同的字段)。
    1yndonn3u
        20
    1yndonn3u  
    OP
       2015-11-26 10:18:41 +08:00
    @SilentDepth 太感谢了!!听明白了~~~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2796 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:05 PVG 21:05 LAX 05:05 JFK 08:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86