|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
平台即服务PaaS、基础设施即服务IaaS、软件即服务SaaS都是我们比较熟悉的MySQL学习教程,现在又出现了数据库即服务DBaaS,以基于云的方式存储结构化数据。</p>关于数据库的逻辑计划,是一个很普遍的成绩。本文次要针对开辟使用中碰到在MSSQLServer长进行表计划时,对表的主键计划应注重的成绩和响应的办理举措。
主键计划近况和成绩
关于数据库表的主键计划,一样平常而言,是依据营业需讨情况,以营业逻辑为基本,构成主键。
好比,发卖时要纪录发卖情形,一样平常必要两个表,一个是发卖单的提要形貌,纪录诸如发卖单号、总金额一类的情形,别的一个表纪录每种商品的数目和金额。关于第一个表(主表),一般我们以票据号为主键;关于商品发卖的明细表(从表),我们就必要将主表的票据号也放进到商品的明细表中,使其联系关系起来构成主从干系。同时该票据号与商品的编码一同,构成明细表的团结主键。这只是一样平常情形,我们略微将这个成绩延长一下:假设在明细中,我们每种商品又大概以分歧的代价体例发卖。有部分按扣头代价发卖,有部分按一般代价发卖。要纪录这些情形,那末我们就必要第三个表。而这第三个表的主键就必要第一个表的票据号和第二个表的商品号再加上本身必要的信息一同组成团结主键;又大概其他情形,在第一个主表中,自己就是以团结体例组成团结主键,那末也必要在从表中将主表的多个字段增加出去团结在一同构成本人的主键。
数据冗孑遗储:跟着这类主从干系的延长,数据库中必要反复存储的数据将变得愈来愈复杂。大概当主表自己就是团结主键时,就必需在从表中将一切的字段从头存储一次。
SQL庞大度增添:当存在多个字段的团结主键时,我们必要将主表的多个字段与子表的多个字段联系关系以猎取满意某些前提的一切具体情形纪录。
程序庞大度增添:大概必要传送多个参数。
效力下降:数据库体系必要判别更多的前提,SQL语句长度增添。同时,团结主键主动天生团结索引
WEB分页坚苦:因为是团结主键体例(关于多半的子表),那末在WEB页面上要举行分页处置时,在自联系关系时,难于处置。
办理计划
从下面,我们已看到现有布局存在着相称多的坏处,次要是招致程序庞大、效力下降而且倒霉于分页。
为办理上述成绩,本文提出:当使用体系背景数据库表间存在主从干系时,数据库表分外增添一非营业字段作为主键,该字段为数值型;大概当该表必要在使用中举行分页查询时,也招考虑云云计划。一样平常地,我们也能够几近为任何表增添一个与营业逻辑有关的字段作为该表的主键字段。
因为该字段要作为表的主键,那末其主要前提是要包管在该表中要具有独一性。同时,分离SQLServer数据库本身的特征,能够为其创建一个自增列:
createTABLET_PK_DEMO
(
U_ID BIGINT NOTNULLIDENTITY(1,1),
–独一标识纪录的ID
COL_OTHER VARchar(20)NOTNULL ,
–其他列
CONSTRAINTPK_T_PK_DEMOPRIMARYKEY NONCLUSTERED
(U_ID)–界说为主键
)
可是,SQLServer中的自增列却存在一个对照为难的现实,那就是该字段一旦界说和利用,用户没法间接干涉该字段的值,完整由数据库体系本身把持:
完整数据库体系把持,用户没法修正值
在数据库的公布和定阅时,利用自增列会对照贫苦
恢复部分数据时,利用自增列会对照贫苦
该列的值必需在拔出数据后才干猎取
鉴于此,倡议不以自增列的体例来界说,而是参考Oracle数据库体系中序列,在SQLServer体系中完成相似Oracle数据库体系序列功效。这个详细鄙人面的大节中先容。我们只必要依照一般字段的界说体例修正表界说为:
createTABLET_PK_DEMO
(
U_ID BIGINTNOTNULL,–独一标识纪录的ID
COL_OTHER VARchar(20)NOTNULL,–其他列
CONSTRAINTPK_T_PK_DEMOPRIMARYKEY NONCLUSTERED(U_ID)–界说为主键
)
<p>如果你需要额外的功能的话,MySQL的普及性实际上可以让你发现总有一个厂商会提供准确的解决方案,而这个方案会满足你的需要和需求。 |
|