惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - 马啸西风

SQL Server 2008之XML数据存储 SQL Server 2008之托管代码 SQL Server 2008之触发器 SQL Server 2008之约束 SQL Server 2008之用户自定义函数 SQL Server 2008之错误处理 SQL Server 2008之创建高并发应用程序 SQL Server 2008之合并数据和表传递 SQL Server 2008之存储过程的设计和实现 SQL Server 2008之通过非聚集索引提高性能 SQL Server 2008之读取查询计划 SQL Server 2008之表结构实现 SQL Server 2008之索引设计 SQL Server 2008之视图的设计和实现 SQL Server 2008之数据类型 启用Application library caching时,将多个不同步的程序集打包到一个ZIP包中的问题 垃圾收集导致的概率性发生的bug DataGridView中下拉列表框的实现 C#之集合
SQL Server 2008之表的设计和实现
马啸西风 · 2012-12-22 · via 博客园 - 马啸西风
  1. Table可以用来作为安全边界,即表级别安全许可;SQL Server中支持ColumnTable级别安全许可,在SQL Server中还没有行级别安全许可,不过可以通过视图、存储过程、触发器来实现行级别安全许可
  1. A candidate key用来唯一标示一行,主键就是从潜在的多个candidate key中选择的;通常来说,如果表经过了正确的规范化处理的话,一个表应该只有一个candidate key可以用来作为主键,但这不是绝对的;主键必须唯一、不允许为null、不允许修改
  1. surrogate key用来作为表的唯一标示,不是根据真正的数据得来的,和表中其他列不相关;Natural Key则是根据表中的数据形成的
  2. SQL Server2005中大部分system tablessystem views所替代,这些视图是需要权限的,在之前的SQL Server中用户可以修改system tables,这会导致非预期的行为、错误
  3. msdb数据库被SQL Server Agent使用,主要用来组织后台计划任务,在这个数据库中存在大量系统表,不要直接修改这些表
  4. Schema是对象的容器,对象包括TableStored ProcedureFunctionTypeView;也是安全边界,可以在Schema级别设置安全许可,简化安全设置;在SQL Server中对象正式名称为:Server.Database.Schema.Object
  5. SQL Server2000及以前的版本中,对象名称为Server.Database.Owner.Object,从SQL Server2005开始Owner已经不是对象名称的一部分,在升级这些早期的程序时,SQL Server会自动创建一个和owner名称一样的schema
  6. 当没有指定Schema时,使用如下规则:首先检查用户的Default Schema,如果没有找到的话,就检查dbo这个Schema;在代码中包含Schema名称非常重要,这样就不依赖于默认的Schema设置啦
  1. 使用CREATE SCHEMA命令创建SchemaSchema包含名称和ownerSchema和其中包含的对象可以不是同一个owner(这样会导致复杂的安全问题),还可以在该语句中创建对象
  1. DROP表时,所有的permissionconstraintindextrigger也被DROP,引用表的代码不会被删除,包括存储过程、函数,这将导致这些代码引用不存在的对象,SQL Server 2008引入了许多Dependency Views用来定位引用不存在对象的代码,包括sys.sql_expression_dependencies,也可以通过sys.dm_sql_referenced_entitiessys.dm_sql_referencing_entities这些dynamic management views查询
  2. 修改表时将保留表的permissiondata,可以添加或者删除列和约束,启用或者禁用约束和触发器;注意添加和删除列的语法是不一致的,添加列时不能指定COLUMN关键字,删除列时必须指定COLUMN关键字,否则会被认为是删除约束,而不是删除列
  3. 临时表应该显式删除,而不是依赖于自动被删除,通常都是通过SELECT INTO语句创建的;临时表还可以用来在两个存储过程之间传递结果集,比如在sp_a中使用sp_bsp_b创建临时表,则这个临时表对sp_a也可见,这样做违背了代码抽象的原则,不鼓励这样做,此时可以考虑使用table-valued parameters;过度使用临时表会带来性能和资源问题,也表明缺乏基于集合设计的思想
  4. 计算列通常用来在不需要去规范化的情况下就可以简化数据访问;非持久化的计算列在每次SELECT语句执行时都要执行计算,持久化的计算列在插入或者更新时计算,在SELECT时和其他数据一样(不需要计算),持久化计算列和非持久化计算列本质区别就是执行时机,持久化计算列在更新时进行计算,适用于很少更新但是经常查询的情形,非持久化计算列在查询时更新,适用于经常更新但是很少查询的情形,一般的应用程序都是经常查询很少更新,因此一般情况下,持久化计算力性能更好一些

发表于 2012-12-22 23:13  马啸西风  阅读(1365)  评论()    收藏  举报

Powered By 博客园