热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

数据删除问题?-php教程

例如有个商品表,其中有个商品,已经跟其他表产生了关联,像订单表等。但是我现在要删除这个商品表,我是真的从数据库中删除吗?如果删除了其他的关联表该怎么处理?如果我不删除,数据不是一直积累在那里?...
例如有个商品表,其中有个商品,已经跟其他表产生了关联,像订单表等。
但是我现在要删除这个商品表,我是真的从数据库中删除吗?
如果删除了 其他的关联表该怎么处理?
如果我不删除,数据不是一直积累在那里?
我现在是添加了个字段 来表示是否删除.

你们是怎么处理这种问题的?

回复内容:

例如有个商品表,其中有个商品,已经跟其他表产生了关联,像订单表等。
但是我现在要删除这个商品表,我是真的从数据库中删除吗?
如果删除了 其他的关联表该怎么处理?
如果我不删除,数据不是一直积累在那里?
我现在是添加了个字段 来表示是否删除.

你们是怎么处理这种问题的?

如果有数据依赖的话,我建议加个 status 的字段,显示该商品是否下线。因为订单里依然需要商品的详细信息,所以不能硬删除。
以关系型数据库为例,我觉得可以这样判断,对记录 A 进行硬删除时,必须保证删除与 A 相关的子集记录,同时包含 A 信息的记录不会产生数据不一致。
例如,删帖操作:

comment <-> post <-> author

删除 post 的同时,必须要把 post 下的 comment 全部删除,但是如果 author 的发帖记录需要保存的话,这时就要保证数据的一致性了。
可以采取两种措施,第一种就是跟商品操作一样,对 post 设置字段标记,第二种就是根据需求生拷贝post 的标题,(所以当用户浏览发帖记录时还是能看到所有的回帖的标题,但是点击已删除记录时,提示该 post 已删除),生拷贝后的信息可以用一张新表保存起来,与原表相比减少了存储空间,这个操作只是为了保证数据一致性。当将来 author 信息也要被删除时,等同于 commentpost,这个生拷贝的信息也就可以彻底删除了。
我认为删除操作的难点就在于如何保持删除后的数据一致性问题,当然如果一开始就能设计出高范式低依赖的数据库结构那是最好不过了。

还有一种观点就是一切皆软删除,也就是整个系统没有一次真正意义上的删除,所有的历史记录全部保留,例如 git

把商品从product表移到archived_product表, 实现数据冷热分离.

查询时使用一点小技巧, 这个是 高性能mysql 的例子:

SELECT GREATEST(@found := −1, id) AS id, 'product' AS which_tbl
    FROM product WHERE id = 1
UNION ALL
SELECT id, 'archived_product'
    FROM archived_product WHERE id = 1 AND @found IS NULL
UNION ALL
SELECT 1, 'reset' FROM DUAL WHERE ( @found := NULL ) IS NOT NULL;

推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
author-avatar
手机用户2602891751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有