外键在电商网站数据库设计中用的多不多啊?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

外键在电商网站数据库设计中用的多不多啊?

2016-07-04 11:51:36 1616 1

外键在电商网站数据库设计中用的多不多啊?

比如用在一些关联表上,感觉很实用,保证了不会产生错误的数据行,和无用的数据行,但是也有人说尽量不要去使用外键,在程序中控制数据的完整性约束性就可以了,否则不方便维护,我也不知道到底怎么样好。

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:50:36

    但是也有人说尽量不要去使用外键,在程序中控制数据的完整性约束性就可以了,否则不方便维护
    你要看是什么人说的。
    很多程序员的数据库水平比不上用户。这些人认为程序是万能的。
    很多DBA认为数据是最重要的,比程序活的长。程序不能用了,数据仍是企业的重要资产。

    如果不用外键,数据的完整性得不到保证。如果你觉得这样可以接受,当然可以不用外键。
    外键是基本的数据库约束,如果这都省略了,那你的数据库根本不能称为数据库。很多人说关系数据库性能差,其实大部分都是他们设计得差。

    下面谈谈很多人所说的外键的缺点。
    外键会带来不便

    比如,删一条数据出错
    我觉得这不是坏事,尤其是对用户来说。想想编程时,编译器也会报错,我们都知道这不是坏事,反而提前防止了错误。
    又比如,批量insert
    如果你可以肯定数据没问题,DBMS提供了忽略外键约束的选择。但是,当数据的输入来源不可靠时,很容易出现数据不一致,所以大部分时间外键(还有其他约束)是必要的。
    外键需要额外的开销,降低性能
    任何代码都有开销,关键看值不值得。什么事都不做,是最快的,根本不需要花时间。
    正因为数据的正确性是至关重要的,用外键当然值得。

    即使不用外键,你也要在程序中控制数据的正确性。所以这个开销是必须的,不能省掉的。
    通过程序控制数据完整性有很多缺点,比如
    1 程序bug
    基本上没有无bug的程序,这就是说,外键的功能无法可靠地被程序替代。

    2 数据和程序的强耦合
    数据库只能被一个程序使用,要支持多个程序,并且保证数据完整性,
    a) 要么重复逻辑
    每个程序自己控制数据的一致性,显然是很糟糕的。
    b) 要么通过共同的接口访问数据库
    这是比较流行的一种方法。3层架构,SOA,...
    我不敢说这些架构都是错误的,他们都有特定的用途。但是你要明白,一个系统越复杂,零件越多,出错的可能性就越大,而且性能也越差。

    总而言之,如果你认为数据正确性是必须要保证的,那么你就必须付出一定的代价来实现。用外键比用程序控制更可靠,同时更简单直接,减轻了程序的负担。
    DBMS有40年的历史,是顶尖的程序员用C/C++开发出来的,经过重重测试,被无数项目用到,其可靠性和性能已经接近最优状态了。
    你如果觉得你们项目里的程序员能做得更好,对事务、并发等技术都无比熟悉,又有充足的时间,那你们可以用程序控制。

    老实说,我接触的项目很多都是不用外键约束的,很多都是不考虑规范化设计的。这样的系统很复杂(没必要这么复杂),性能不好。这是我的切身体会。

    当然,所有事情都不能一概而论,不用外键的程序也能做得很好,卖得很好。当你做决定时,要想清楚后果。
    我个人倾向于经典的方法,可靠的方法。

    0 0
相关问答

17

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1039111浏览量 回答数 17

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157696浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 337014浏览量 回答数 8

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147239浏览量 回答数 22

3

回答

请问postgres实时同步数据到mysql数据库有什么好的方案吗?

toni3 2019-06-29 14:55:43 116155浏览量 回答数 3

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 128882浏览量 回答数 2

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259837浏览量 回答数 38

21

回答

请教一下数据量有100万条左右要什么配置?

易网网络 2013-03-27 15:18:02 192640浏览量 回答数 21

78

回答

【2013.9.5修正版图文】新手如何使用阿里云(linux)服务器建站(搬站)

姑苏公子 2013-04-11 00:39:13 107998浏览量 回答数 78

103

回答

云虚拟主机使用教程完整版!!

梦丫头 2015-08-08 13:12:33 107604浏览量 回答数 103
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载