澳门游艺场9159-9159金沙游戏场

在设计一个新系统的Table,他们是不会用到桌面工

作者: 澳门游艺场  发布:2019-10-03

在设计一个新系统的Table Schema的时候,不仅需要满足业务逻辑的复杂需求,而且需要考虑如何设计schema才能更快的更新和查询数据,减少维护成本。

模拟一个场景,有如下Table Schema:

9159金沙游戏场 1

Product(ID,Name,Description)

mysql作为绝大部分公司使用的数据库,自然是牛牛牛!

在设计思路上,ID是自增的Identity字段,用以唯一标识一个Product;在业务逻辑上要求Name字段是唯一的,通过Name能够确定一个Product。业务上和设计上有所冲突在所难免,解决冲突的方法其实很简单:将ID字段做主键,并创建clustered index;在Name字段上创建唯一约束,保证Product Name是唯一的。

每个人都能设计数据库,都能从删库到跑路。但是,如何做到更好,更快,更准地建立你的mysql数据库,这是个值得关注的问题(尽管很多人已经去搞大数据去了,但是思路仍然是通用的)。

这样的Table Schema 设计看似完美:ID字段具有做clustered index的天赋:窄类型,自增,不会改变;Name上的唯一约束,能够满足业务逻辑上的需求。但是,如果业务人员操作失误,将Product 的 Name 写错,需要将其删除,最简单的方式是使用delete 命令,直接将数据行删除,但是这种方式带来的隐患特别大:如果业务人员一不小心将重要的数据删除,那么,恢复数据的成本可能非常高。如果数据库很大,仅仅为恢复一条数据,可能需要N个小时执行还原操作。如何设计Table Schema,才能避免在维护系统时出现被动的情况?

在没有sql桌面工具时(或者对于大牛来说),他们是不会用到桌面工具的,都是一个字一个字的码出数据库,这当然是根本。但是,能够高效地利用工具,尤其在有的场合必须要用工具时,又何偿不是一种好事呢!下面我就来总结下mysql桌面工具 sqlyog 的一些应用吧,在总结的同时,也希望能点燃你不经意的眼睛。

delete Product
where Name='xxx'

由浅入深!!!

设计目的:在短时间内恢复被误删除的数据,以使系统尽快恢复

一、创建新库新表,开始你的工作;

在实际的产品环境中,数据删除操作有两种方式:软删除和硬删除,也称作Logic Delete 和 Physical Delete。硬删除是指使用delete命令,从table中直接删除数据行;软删除是在Table Schema中增加一个bit类型的column:IsDeleted,默认值是0,设置IsDeleted=1,表示该数据行在逻辑上是已删除的。

Tables > Create Table , 话不多说,填写表名,选择引擎,字符集

Product(ID,Name,Content,IsDeleted,DeletedBy)

9159金沙游戏场 2

9159金沙游戏场,软删除实际上是一个Update 操作,将IsDeleted字段更新为1,在逻辑上将数据删除,并没有将数据行从物理上删除。使用软删除,能够保留有限的数据删除的历史记录,以便audit,但是,这可能导致外键关系引用被逻辑删除的数据;如果历史记录太多,这又会导致数据表中有效数据行的密度降低,降低查询速度。

二、查看历史记录,记录下你不会的SQL,上线时使用;

1,能够快速恢复被误删除的数据

History, 当你不知道怎么直接写sql时,你需要将从界面上操作的sql记录下来,查看历史记录,找出改动的sql,也帮助下次提升sql能力打下基础澳门游艺场9159,!

用户的删除操作是将IsDeleted设置为1,在逻辑上表示删除数据,如果用户由于误操作,将重要数据行删除,那么只需要将IsDeleted重置为0,就能恢复数据。

所谓,见多,则识广!

update Product
set IsDeleted=1
where Name='xxx'  -- or  use ID=yyyy as filter

9159金沙游戏场 3

2,每次引用该表时,必须设置filter

三、添加索引,优化你的数据;

任何引用该表的查询语句中,必须设置Filter:IsDeleted=0,为来避免遗漏filter,可以创建视图,不直接引用该表,而是直接引用视图。

Alter Table > Indexes > Columns 添加索引,添加适当的索引,是一个数据库设计的基本常识。

--view definition
select ID,Name,Content
from Product
where IsDeleted=0

9159金沙游戏场 4

3,手动处理外键关系

四、创建视图、存储过程、触发器、事件,高级mysql应用,DBA干的事;

如果在该表上创建外键关系,那么可能存在外键关系引用被逻辑删除的数据,造成数据的不一致性,这可能是很难发现的bug:如果需要保持关键关系的一致性,需要做特殊的处理。在将数据行逻辑删除之时,必须在一个事务中,将外键关系全部删除。

创建视图、存储过程、触发器、事件,高级mysql应用,这些事应该是DBA的活,但是作为普通开发或其他类型工作,了解一下还是有必要的。

4,不能被用作历史表

总体来说,存储过程和事件会显得更有用,存储过程可以你频繁操作的多个表,连在一起操作带逻辑,事件可以清理一些通用工作。add一个:

本文由澳门游艺场9159发布于澳门游艺场,转载请注明出处:在设计一个新系统的Table,他们是不会用到桌面工

关键词:

上一篇:没有了
下一篇:没有了