今天听了MSDN的WebCast,是关于Entlib的数据访问的讲座,末尾我问了两个自己所关心的问题:
在一个较大型的应用中,如果需要用到两套以上的数据库(如:SQL Server和Oracle),是否可以把需要的sql查询全部封装在存储过程里,这样就只需要一套访问代码了,有没有更好的方法解决这个问题?
在数据库的主键的设立中(同时支持多种数据库)直接用GUID作为主键来得简单,但是在查询的时候影响性能的因素大不大,还有没有更好的解决方法?
以上两个问题,由于时间的关系吧,微软的工程师解答的比较简略,第一个应该需要针对具体的应用来考虑,但是第二个问题,性能影响肯定是有的,但是影响大不大呢,带着这个问题,我做了这个小试验。
注:如果您有更好的建议不防贡献出来大家探讨探讨^_^!
测试环境:
Dell笔记本电脑 迅驰1.5G
Win XP professional
512MB DDR RAM
SQL Server 2000 个人版
测试方法:
建立有10个字段的数据库[test_GUID],使用GUID作为主键,以及其他常用的字段类型,模拟现实中的使用情况,建表的SQL代码如下:
CREATE TABLE [dbo].[Test_GUID] (
[GUID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[test1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[test2] [datetime] NULL ,
[test3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[test4] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[test5] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[test6] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[test7] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[test8] [int] NULL ,
[test9] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Test_GUID] WITH NOCHECK ADD
CONSTRAINT [PK_Test_GUID] PRIMARY KEY CLUSTERED
(
[GUID]
) ON [PRIMARY]
GO
建立有10个字段的数据库[test_IIDD],使用IIDD作为主键,以及其他常用的字段类型,模拟现实中的使用情况,建表的SQL代码如下:
CREATE TABLE [dbo].[Test_IIDD] (
[IIDD] [numeric] (9) IDENTITY(1,1) NOT NULL ,
[test1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[test2] [datetime] NULL ,
[test3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[test4] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[test5] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[test6] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[