0

0

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

php中文网

php中文网

发布时间:2016-06-06 20:19:42

|

1422人浏览过

|

来源于php中文网

原创

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

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

回复内容:

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

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

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

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

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

  1. 比如,删一条数据出错
    我觉得这不是坏事,尤其是对用户来说。想想编程时,编译器也会报错,我们都知道这不是坏事,反而提前防止了错误。

  2. 又比如,批量insert
    如果你可以肯定数据没问题,DBMS提供了忽略外键约束的选择。但是,当数据的输入来源不可靠时,很容易出现数据不一致,所以大部分时间外键(还有其他约束)是必要的。

外键需要额外的开销,降低性能
任何代码都有开销,关键看值不值得。什么事都不做,是最快的,根本不需要花时间。
正因为数据的正确性是至关重要的,用外键当然值得。

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

SmartB2B行业电子商务
SmartB2B行业电子商务

SmartB2B 是一款基于PHP、MySQL、Smarty的B2B行业电子商务网站管理系统,系统提供了供求模型、企业模型、产品模型、人才招聘模型、资讯模型等模块,适用于想在行业里取得领先地位的企业快速假设B2B网站,可以运行于Linux与Windows等多重服务器环境,安装方便,使用灵活。 系统使用当前流行的PHP语言开发,以MySQL为数据库,采用B/S架构,MVC模式开发。融入了模型化、模板

下载

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

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

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

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

外键能保证数据的完整性和一致性,举例说:
一个商品订单表,订单详情表,订单详情表的订单id依赖于订单表的id,
学生表,学生成绩表,成绩表中的学号依赖于学生表中的主键。

换言之,要订单详情表中的订单id要在订单表存在才能插入,成绩表中的学号要存在这个学号才能插入.

麻烦是当删除学生时要相应删除其有依赖关系的数据,

mysql的myisam不支持外键,[设置了也无效]

看情况和偏好。有些外键可以放开,就比较灵活一点,放到程序里头去维护。

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号