SQL Server Compact有什么限制? (或者 – 如何select在MS平台上使用的数据库?)
我想使用MS Visual C#Express(我愿意升级到标准,如果需要的话)需要数据库的应用程序。
我对SQL Server Compact感到兴奋不已 – 因为我不希望那些在我们的计算机上安装应用程序的人不得不安装整个SQL Server或类似的东西。 我希望这可以让最终用户尽可能简单地安装。
所以我非常兴奋,直到看起来我对表格中的列有什么限制。 我创build了一个新的数据库,创build了一个表,当我去创build列似乎没有一个“文本”数据types – 只是被称为“ntext”,似乎被限制为255个字符。 “int”似乎被限制在4(我想要11)。 而且似乎没有“auto_increment”function。
这些是我必须忍受的真正限制吗? (或者是因为我使用“快速”而不是“标准”)。 如果这些是真正的限制,我的其他数据库选项是否符合我的要求? (对于用户来说是简单的安装 – 我假设我的最终用户只是计算机的普通用户,如果它很复杂,会让我的应用感到沮丧)
-Adeena
PS:我也希望我的数据库数据被encryption到最终用户。 我不希望他们能够直接访问数据库表。
PPS。 我没有阅读: http : //www.microsoft.com/Sqlserver/2005/en/us/compact.aspx ,并没有看到有关这些特定限制的讨论
我不确定encryption,但你可能会发现这个链接有帮助:
http://msdn.microsoft.com/en-us/library/ms171955.aspx
至于其余的部分:
“文本”和“auto_increment”使我想起了Access。 SQL Server Compact应该与SQL Server的服务器版本升级兼容,因为紧凑型数据库中使用的查询和表应该无需修改即可转移到完整数据库。 考虑到这一点,您应该首先查看SQL Servertypes和名称,而不是Access名称:在这种情况下,即varchar(max)
, bigint
和identity
列。
不幸的是,你会注意到这个失败与varchar(max)有关,因为Compact Edition还没有varchar(max)types。 希望他们能尽快解决。 但是,您所看到的ntexttypes支持的字节数超过了255个:事实上,这个数字超过了5亿个字符。
最后,bigint使用8个字节进行存储。 你问了11.但是,我想你可能会觉得这个存储大小是可用的十进制数。 这绝对不是这种情况。 8个字节的存储空间允许数值高达2 64 ,这将容纳超过11位数字。 如果你有这么多的东西,你可能需要一个服务器级的数据库。 如果你真的想用数字来思考,还有一个numeric
types。
一些,希望有帮助的评论:
第一 – 不要使用SQLite,除非你喜欢在写入过程中locking整个数据库( http://www.sqlite.org/faq.html#q6 ),或者更重要的是在.Net应用程序中它不是线程安全的,或者更重要的是它必须重新编译为支持线程( http://www.sqlite.org/faq.html#q6 )
作为我当前项目的替代品,我看了Scimore DB(他们有一个ADO.Net提供程序的embedded式版本: http : //www.scimore.com/products/embedded.aspx ),但我需要使用LINQ To SQL作为O / RM,所以我不得不使用Sql Server CE。
自动增量(如果你指的是自动键递增)是它总是 – 示例表:
– 表用户
CREATE TABLE Tests ( Id **int IDENTITY(1,1) PRIMARY KEY NOT NULL,** TestName nvarchar(100) NOT NULL, TimeStamp datetime NOT NULL ) GO
至于文本大小,我认为这是回答。
这里是一个链接到从微软technetencryption的信息:( http://technet.microsoft.com/en-us/library/ms171955.aspx )
希望这个对你有帮助….
不得不提出两个因素:
- 我使用Sql Compact很多,它的function非常强大 – 单用户,embedded式,数据库,单个文件数据存储。 它具有所有的SQL善良和交易。 它对我来说足够平行。 请注意,本页上的反对者很less使用该产品。 不要在服务器上使用它,这不是它的用途。 我的许多客户甚至不知道这个文件是一个“数据库”,这只是一个实现问题。
- 你想encryption你的用户的数据 – 大概是他们只能从你的程序中查看它。 这根本不会发生。 如果您的程序可以解密数据,那么您必须将密钥存储在某个地方,并且一个足够专门的攻击者会发现它。
您可以将密钥隐藏得足够好,以便恢复密钥不值得信息的价值。 Windows有一些简洁的机器和用户本地encryption例程来帮助。 但是,如果你的devise有一个强大的要求,即用户永远不会发现你的计算机上隐藏的数据(但是你的程序会),你需要重新devise – 这个保证不能完成。
SQL CE对我来说是一个难题。 我们是否真的需要另一个不同的SQL数据库平台? 而且这是过去几年针对MS移动平台的第三次…我不会有很多的信心,这将是最后一个。 如果使用SQL Server的技术,它不会分享太多的东西 – 就我所知,这是一个新的技术。
我已经尝试过了,然后用SQLite和Codebase更成功。
编辑: 这是 (许多)差异的列表 。
ntext
支持非常大的文本数据(请参阅MSDN – 这是用于Compact 4.0,但对于提及的数据types也适用于3.5)。
int
是一个数字数据types,所以4
的大小意味着4个字节/ 32位的存储量(-2,147,483,648到2,147,483,647)。 如果打算将11个字节的数据存储在单个列中,请使用大小为11的varbinary
types。
自动递增SQL Server世界中的列使用IDENTITY
关键字完成。 这导致SQL Server在将数据插入一行时自动确定该列的值,从而防止与其他任何行发生冲突。
您还可以在SQL Compact中创build密码时设置密码或encryption数据库,以防止用户直接访问您的应用程序。 请参阅MSDN上的保护数据库 。
上面提到的所有项目都不是真正的限制,就像他们正在理解如何使用SQL Server一样。
话虽如此,SQL Compact有一些限制。
- 不支持
NVARCHAR(MAX)
-
NTEXT
为此工作得很好
-
- 不支持
VIEW
或PROCEDURE
- 这是我看到的主要限制
我几次使用了各种SQL Server Compact版本,但是只能作为数据在移动平台上捕获存储库 – 在与服务器数据库同步的情况下,它的工作方式非常好,而且这种情况无疑是可选的select。
然而,如果你需要做的不仅仅是这些,而且作为你的应用程序的主要数据库,那么我build议SQLLite可能是更好的select,它是完全可靠的,广泛支持,并在各种地方(在iPhone上使用例如),但是出人意料的是(虚拟现实模拟器OpenSim使用它作为默认的数据库),还有很多其他的 (包括Microsoft)。
作为SQL CE的替代品,我还必须在这里用VistaDB作为参考。
VistaDB不支持encryption(Blowfish),它也支持TEXT和NTEXT(包括FTS索引)。
是的,上面的post是正确的,你必须看看SQL Servertypes来真正匹配它们,VistaDB也使用SQL Servertypes(我们实际上比SQL CE支持更多;只是缺lessXML)。
要查看VistaDB和SQL CE之间的其他比较,请访问比较页面。 有关更多信息,另请参阅有关VistaDB优点的SO线程。
(全面披露 – 我是VistaDB的拥有者,所以我可能会有偏见)
根据这篇文章( http://www.nelsonpires.com/web-development/microsoft-webmatrix-the-dawn-of-a-new-era/ )它说因为它使用了一个数据库文件,所以只有一个进程可以访问它的每一个读/写,因此它需要独占访问该文件,也被限制为256连接,整个文件将很可能不得不被加载到内存中。 因此,SQL Server compact可能不适合您的网站。
有约束…乔尔似乎已经解决了细节。 SQL CE真正适用于移动开发。 大多数“embedded式”数据库解决scheme都有类似的限制。 查看
-
SQLite的
- 没有
TEXT
字段字符限制 - 仅在
INTEGER PRIMARY KEY
列上自动递增 - 一些第三方encryption支持
- 没有
-
ESENT
- (非托pipe代码不是我的专长,我不能解密非托pipe文档 )