2009年6月25日

SQL 实用技巧-开发,管理

  • 如何用一条sql语句查出所有数据类型为char的字段?
select * from syscolumns where xtype=175

  •  生成8位随机的数字,并且在表中不重复的问题

 

CREATE TABLE TB1(NUM int)
insert tb1

SELECT 10000000 union all
SELECT 10000001

DECLARE @TIMES int,@OUTPUT int
SELECT @TIMES=100
WHILE(@TIMES>0)
    BEGIN
        SELECT @OUTPUT=FLOOR(rand()*100000000)
        IF NOT EXISTS(SELECT 1 FROM TB1 WHERE @OUTPUT=NUM)
            BEGIN
                PRINT @OUTPUT
                BREAK
            END
        ELSE
            BEGIN
                SET @TIMES=@TIMES-1
            END
    END

    IF @TIMES=0
    PRINT -1


  • SQL 2000中的ntext类型数据怎么replace?
--如果小於8000 可以轉換成VARCHAR(8000) 2005 VARCHAR(MAX)來處理
IF OBJECT_ID('TEMPDB..#')IS NOT NULL DROP TABLE #
GO
CREATE TABLE #([NAME] TEXT)
INSERT # SELECT '張三'
INSERT # SELECT '李四'

SELECT REPLACE(CAST([NAME] AS VARCHAR(8000)),'張','王') FROM #
/*-----------------------------------------------------------------------------------------------------------
王三
李四

(影響 2 個資料列)
*/

  • 怎么查从1---1000有哪些数字没有出显?
create table tb(i int)
insert into tb select 2
insert into tb select 5

select top 1000 identity(int,1,1) as i into # from sysobjects

select #.i from # left join tb on #.i=tb.i
where tb.i is null

  • 用SQL语句判断是否能打开一个网站?
http://www.itpob.net/home/space.php?uid=1&do=blog&id=6 

  • 如何实现对数据库磁盘使用情况自动化监控? 
http://www.itpob.net/?action-viewnews-itemid-38030 

 

 

http://www.itpob.net/?action-viewnews-itemid-38030

posted @ 2009-06-25 13:11 幻影007 阅读(136) 评论(0) 编辑

必须遵守的SQL Server标准化规则

  首先,你必须遵守SQL Server标准化规则

  什么是标准化?

  标准化就是涉及数据模型,以便有效地在数据库中存储数据。最终结果就是消除了冗余数据,只有与属性相关的数据被存储在表中。

  例如,我们要为客户在同一个表中存储城市、州和邮政编码数据,其他客户也有同样的数据。通过这种方式,我们就会为在同一个城市的所有客户重复输入相同的城市、州,以及邮政编码数据。为了不一次又一次地存储同样的数据,我们应该将数据标准化,然后创建一个名为city的相关表。City这个表用来存储城市、州、邮政编码,以及ID号,这个ID号与客户表中的ID号相关,这样我们就可以删除客户表中的三个列,然后只添加一个新的ID列。

  标准化规则分解为几种形式。当谈论到数据库设计的时候,人们经常倾向于使用第三范式(3NF)。这是大多数数据库设计人员想要得到的:在概念阶段,数据是分段的,并且尽可能的标准化,但是为了实用的目的,这些分段在数据模型的修改中发生变化。可以在数据模型的不同部分引入各种范式来处理你可能面对的独特的情况。

  无论你是否听说过标准化,你的数据库都会遵循一些规则,除非你所有的数据都是存储在一个庞大的表中。下面我们看一下三个范式中的第一范式,以及决定不同范式的规则。

  第一范式的规则(1NF)

  消除重复的组。下面这个表在软件列中包含了重复的数据组。

  Computer Software

  1 Word

  2 Access, Word, Excel

  3 Word, Excel

  为了遵循第一范式,我们在每个记录中只存储了一种软件类型

  Computer Software

  1 Word

  2 Access

  2 Word

  3 Excel

  3 Word

  3 Excel

  第二范式的规则

  消除第一范式中的冗余数据。下面这个表包含了冗余的软件名字。

  Computer Software

  1 Word

  2 Access

  2 Word

  3 Excel

  3 Word

  3 Excel

  为了消除存储的冗余数据,我们创建了两个表。第一个表存储参考SoftwareID ,指向新表中惟一的软件名称。

  Computer SoftwareID

  1 1

  2 2

  2 1

  3 3

  3 1

  3 3

  SoftwareID Software

  1 Word

  2 Access

  3 Excel

  第三范式的规则

  消除第一、第二范式中不依赖于键值的列。在这个表中,同时含有有关计算机和用户的数据。

  Computer User Name User Hire Date Purchased

  1 Joe 4/1/2000 5/1/2003

  2 Mike 9/5/2003 6/15/2004

  为了消除不依赖于键的列,我们创建了以下的表。现在,存储在computer表中的数据只与计算机相关,存储在user表中的数据只与用户相关。

  Computer Purchased

  1 5/1/2003

  2 6/15/2004

  User User Name User Hire Date

  1 Joe 5/1/2003

  2 Mike 6/15/2004

  User User Name User Hire Date

  1 Joe 5/1/2003

  2 Mike 6/15/2004

  SQL Server标准化必须要做什么?

  说实话,答案是没有。SQL Server,与其他的关系型数据库管理系统一样,毫不关心你的数据模型是否遵循任何一个范式。你可以创建一个表,所有数据都存储在一个表里面,或者你也可以创建许多个小的,没有关系的表来存储数据。SQL Server支持你决定做的任何事情。你可能遇到的惟一的一个限制因素就是SQL Server在一个表内支持的最大列数。

  SQL Server没有强迫或者加强任何你以任何一种范式创建数据库方面的规则。你可以混和并匹配你需要的任何规则,但是尽可能地在你设计数据库的时候就将其标准是一个好主意。人们倾向于花费大量时间创建一个标准化的数据模型,但是一旦需要添加新的列或者表的时候,他们就会忘记最初在努力创建一个优美的干净的模型方面所做的努力。

  为了辅助数据模型的设计,你可以使用SQL Server企业管理器中自带的DaVinci 工具

  标准化优点:

  1、 更小的数据库:消除了重复的数据之后,你可以缩减数据库的整体规模。

  2、 更好的性能。

  A、 缩小的表:拥有更加调整良好的表可以让你的表拥有较少的列,并且在每个数据页中装载更多的记录。

  B、 每个表拥有更少的索引意味着更快的维护任务,例如索引的重建。

  C、 只在需要的时候进行表连接。

  标准化的缺点:

  1、 需要连接的表更多:通过将你的数据散布到更多的表中,增加了连接表的需求。

  2、 表中包含更多的代码,而不是数据:重复的数据以代码的形式存储,而不是有意义的数据。因此,总是需要查看表中的数值。

  3、 数据模型查询困难:数据模型为了应用程序而进行优化,而不是为了特别的查询。

  总结

  你的数据模型设计同样是艺术的和科学的。最好地平衡两者以支持将要使用数据库的应用程序,并且以有效的和结构化的方式存储数据。对于基于事务的系统,高度标准化的数据库设计是必经之路;它确保了整个数据库中数据的一致性,并且能很好的运行。对于基于报告的系统,标准化程度较低的数据库通常是最好的方式。你可以消除连接许多个表的需求,并且查询也更快了。另外,数据库对于特别的报告需求也会用户友好得多。

 

 转至itpob.net: http://www.itpob.net/?action-viewnews-itemid-215

posted @ 2009-06-25 10:45 幻影007 阅读(109) 评论(0) 编辑

导航

统计

公告