随笔分类 - SQL Story
摘要:基于三元语义的关系数据库动态建模工具SocratesSocrates, Relational Database Dynamic Models Make Tools摘要 SummarySocrates是一个基于关系型数据库和ORM的通用数据库工具。它通过三元语义表达了对动态数据结构的存储和管理功能。使得开发人员可以在关系数据库中管理结构可变的数据。三元语义可以方便的表达单一信息之间的关系,因此它很适合用来表达有向图,甚至有向有环的网状模型,或路径长度很长的关系。预计时长:25分钟难度 Level :面向中级听众类别 Categories:数据库 databases详细内容 Description
阅读全文
摘要:自挖坑,存档岗位职能区分数据库技术在现代软件技术领域有广泛的应用,与数据相关的技术岗位和职能,也可以区分为若干个不同的类别。根据在一个理想的开发团队中不同的分工和知识掌握的不同,可以区分为:程序员分析师设计师 架构师管理员对于数据库领域,分析与设计岗位、架构与运维岗位(管理员)的重叠较高。特别是分析与设计岗位通常在团队中由同一(组)人承担。在更多的团队中架构师也与分析和设计人员的岗位重叠。因此,从项目开发周期考虑,可以简单的分为三类:分析与设计岗位(含架构)开发岗位运维岗位个人能力发展路线基本路线图初级程序员 中级技术岗位 初级设计人员 初级管理员 中级开发人员高级技术岗位架构师设计师高级管理
阅读全文
摘要:前几天有个朋友提了一个问题:应用平台需要统计最近访问的20个用户的信息。我第一个想到的是用memcache之类的专用的缓冲,以用户名为键,以最后访问时间为值,如果用户访问比较均匀,限定一个合适的 超时值,查询的时候遍历过滤就好了,虽然不是很精确,但是实现起来够简单。答:不可以,领导要求只在数据库端解决。环境准备提问的朋友使用的是 MySQL ,这里我用一个 PostgreSQL 8.4(Enterprise DB PostgresPlus Stand Server 8.4) 建立实验环境。操作系统是 Windows 7 RC。客户端是 Emacs sql-postgres,/timing on
阅读全文
摘要:今天要在Firebird中使用分页查询功能,就开始犯愁,这个东西没有Oracle的rownum,也没有SQL Server的Top n,会是通过什么方式分页的呢?非常让人无奈的是Firebird的网站上找不到新版的查询语言文档。而我手头的Interbase 6.0 Language Refrence中对分页查询只字未提。在我心里,准备好了两个方案:1、用Generator生成一个rownum,显然,在并发的情况下,这个办法会有很多麻烦。 2、用客户端游标忽略掉无关的行。.net 1.x的DataGrid分页就是这种方式,性能非常糟糕。Google的结果让我瞠目结舌,原来,Firebird直接支
阅读全文
摘要:树状结构的存储与管理,是每一个在关系型数据库平台上工作的程序员早晚都要遇到的问题。说大不大,怎么都能解决,说小不小,处理不好,有的是麻烦等着你。仁者见仁,智者见智,公说公有理,婆说婆有理(谁用机箱砸我?机箱是个好东西,乱丢会摔坏硬盘的,你看我话没说完你又把显示器丢了……),咳咳,好吧,闲话少说,我们从最大路的处理风格谈一谈吧。这里面的大部分内容并非我的独创,从很久很久以前,数据库程序员们就这样做啦。树状表的结构化表达 在一切开始前,我们先就树状表的表示方式达成一个共识。在关系型数据库中,我们当然没有办法这样直接表示一个树:ab cd e f g 相应的,我们会把它变形为平面表,这种变形让我想起
阅读全文
摘要:游标概观相信很多Delphi程序员都写过这样的代码:...beginMyDataSet.Open;MyDataSet.Frist;while not ( MyDataSet.BOF or MyDataSet.EOF) dobegin...end;MyDataSet.Close;end;...很久以来,我们习惯了用这样的代码对数据库返回的数据进行逐行操作。在用客户端程序的代码打开数据集之前,我们把它当做是一个无序集合。不过,在需要时,我们在服务器端就可以直接以行操作形式处理数据集,这就是游标。游标的的使用方法类似前面的Delphi代码,通常有如下四步:一、声明游标:Declare Cursor.
阅读全文
摘要:不等联接通常来说,SQL语言进行的都是无序操作。想要进行有序的处理,比如比较一个序列的前后项,必须要使用游标。但是,在有些场合下,可采用另一种方法,不用游标,一样能处理有序的信息,这就是不等联接。先看下面一个例子前一阵, CSDN网友BuildIt来信,和我讨论了这样的问题:以下表HISTORYCREATE TABLE [HISTORY] ([TheDate] [datetime] NULL ,[Quantity] [int] NULL ) ON [PRIMARY]中存储的是一系列的历史数据,例如:INSERT HISTORY VALUES('2002-01-01 00:00:00.0
阅读全文
摘要:数据抽取理论上的关系型数据库,数据是以关系的形式存在。通常我们都可以把它们视为一种集合。这样,数据一般是以无序的形式存在的。这种做法的好处自不用多加讨论了,不过我们也得承认,有时这样也会带给我们一些麻烦。我最近就遇到这么一件。我在网上遇上我的一个老同学,他提出了这样一个问题。有一个表(假设就叫myTable),表中有三个整型字段(假设就叫A11,A12,A13),其上有一个唯一键约束。现在他想要在这个表的数据中取一些样品。他希望从中A13的各个取值中,各取一条记录。然后我问他,对A11和A12有什么要求吗?他说,没有,怎么取都可以,有没有规律都行。我想当然的说,简单,给我二十分钟。有一个笑话不
阅读全文
摘要:前面的文章中,我们初步见识了NULL这个不可思议的小东西。今天,我尽可能详细的介绍一下它。依照惯例,这是一次尽量浅显但并不严谨的讨论,甚至可能内容也不那么严肃。我的目的在于帮助读者更轻松地工作,并且有兴趣对数据库进一步的学习。从另一方面讲,我相信自己论点中的错误,肯定会有其他人也在犯,所以请发现不妥的朋友一定要公开指出。这样,才有助于我和我的读者朋友们进步。衷心感谢每一个提出批评和指正的朋友,特别是公开提出批评和指正的朋友们。特别感谢sunshine19,专程发来E-mail,指出了《SQL Story》 的种种不足,并提出了宝贵意见。我期望他继续关心这个专题,并期望他为我们带来优秀的作品。无
阅读全文
摘要:初学SQL的日子,感觉就像是刚学走路,步态可掬,跌跌撞撞。摔了不少可笑的跟头。拿出来大家娱乐一下,也互相提个醒,这样的错我们可以尽量避免的嘛。 先看这个:例1 不合理的逗号:Select Field1, Field2, Field3, From MyTable一执行就是个语法错误,什么意思嘛,这可是从书上抄的哎,你不能这么对我……呵呵呵,其实嘛,错误在于我在最后一个字段名后面加了一个逗号。逗号是分隔字段名或表名的嘛,字段名和Form之间加个逗号算什么事?不要小看它,即使老手,也常出这个错,往往是因为这种情况:我们写了一个Select Field1,Field2,Field3From MyTab
阅读全文
摘要:关系的真相长期以来,我们习惯了称关系型数据库中的表为二维表。因为它有行和列,很容易我们就可以把它同一个二维平面联系起来,但事实上,这并非关系型数据库的初衷,也并非符合关系模型的设计。其实长久以来,我对此也只有一个很模糊的概念,对平面表的观点虽有怀疑,却一直无从验证。直到有一天,翻出一本老书——《关系数据库》(石树刚、郑振楣编著,清华大学出版社,1993年),这本老书没有什么流行的新噱头,却满满当当地净是数学理论。这本书读起来并不是很诱人,不过的确很严谨,澄清了我的很多不明之处。也激励我找来各种权威材料重头学起。薄薄一本书,定价只有9.9元,想想这应当是我在上学时,从旧书摊上买的,可能当时只花.
阅读全文
摘要:例1-2、键值重复的信息现在看一下压缩掉重复信息的PRODUCT表ID PNAME PRICE NUMBER PDESCRIPTION 1Apple 123000NULL2Banana 16.997600NULL3Olive 25.224500NULL4Coco Nut 40.992000NULL4Orange 15.995500NULL5Pineapple 302500NULL6Olive 25.223000NULL这里还有几个有问题的地方。表中Coco Nut和Orange的ID都是4,ID号为3和6的两种商品的品名(PNAME)都是Olive。而我们的原意显然是想要让每一种商品对应一个I
阅读全文
摘要:?写这本书的最初想法,来自于在第一个公司工作时,与同事的交流和学习。不过发布这本书的导火索,却在于一次在CSDN上读到一篇关于最新信息的报表问题的贴子。贴子中的问题可以用子查询和联接两种方式完成。由于条件所限,我不能详细解答,由此发贴的朋友不能理解我的本意,让我心生遗憾。所以决定将写书的想法付诸行动,并将这本书贴在CSDN上,与大家一起交流,共同进步。今天正好又见到类似于当日的问题,心生感触,决定在这里把它详细讨论一下。在实际工作中,我们有时会需要建立数据表来存储变动的数据,并由这些数据统计出我们所需的信息。其中有一类问题的特点在于最终结果的过滤条件来自分组统计后的数据。这类应用常见于网站数据
阅读全文
摘要:在CSDN上回贴时,我总是苦口婆心地劝告楼上楼下的朋友们多用联接。可响应甚微。往往一个简单的功能,也一定要写成子查询或游标,弄得非常复杂冗长。的确,这样写对于初学者来说,费力不费脑,思路比较好理解。所以往往得分的也是这些回贴。可事实上,如果你真正熟悉了SQL的编程风格,你会明白,联接查询才是最直接、最清晰、最有力的方法,而更好的办法就是无招胜有招,一条简单查询结束战斗。下面我举几个例子来证明一下这个观点。例1-1、重复记录的查询和处理总有一些朋友在网上问,一个表中,有重复的记录,怎么办?当然,一个设计风格良好的关系型数据库,每个表都应该有主键、有唯一索引,所以压根就不该有重复记录。不过有时还是
阅读全文
摘要:面向集合的结构化设计。这一点很多人都知道,可真正能够活用的就太少了。举一个简单的例子:例1-3:有一个简单的数据表Orders,存储某商店的订单信息:CREATE TABLE [dbo].[ORDERS] ([ID] [int] IDENTITY (1, 1) NOT NULL ,[CustomerID] [int] NOT NULL ,[OrderDate] [datetime] NOT NULL ) ON [PRIMARY]GOCREATE CLUSTERED INDEX [CU_INX_OrderDate] ON [dbo].[ORDERS]([OrderDate]) WITH FILL
阅读全文
浙公网安备 33010602011771号