
为了让我们的课程更为简单和便于理解,我们先从一个范例入手,逐步深入讲解SiteFactory前台相关数据表之间的关系。
SiteFactory产品的数据是分表储存的,这样做主要有一下几个方面的优势
●减少了冗余信息,节省了数据库存储空间
●简化了数据库的修改、维护等操作
●在数据量庞大的时候能够提高性能
这样我们就不得不谈下SiteFactory主要的几个表之间的关系,以及多表查询技术了,下面我为大家列出了三个表格,分别是公共模
型、节点、文章模型下的几个主要字段,说明其中的关系。
Table: PE_CommonModel 模型公共数据表字段表
|
字段名称 |
字段类型 |
字段描述 |
|
GeneralID |
int |
内容全局ID |
|
NodeID |
int |
节点ID |
|
ModelID |
int |
模型ID |
|
ItemID |
int |
相应表的记录ID |
|
TableName |
nvarchar(255) |
模型表名 |
|
Title |
nvarchar(255) |
标题 |
Table: PE_Nodes节点表
|
Name |
Data type |
Description |
|
NodeID |
int |
节点ID |
|
NodeName |
nvarchar(50) |
节点名称 |
Table: PE_U_Article 文章表
|
Name |
Data type |
Description |
|
ID |
int |
文章ID |
|
Content |
ntext |
内容 |
第一篇文章,第一篇文章的内容
第一篇文章,第二篇文章的内容
第一篇文章,第三篇文章的内容
第二篇文章,第一篇文章的内容
第二篇文章,第二篇文章的内容
第二篇文章,第三篇文章的内容
第三篇文章,第一篇文章的内容
第三篇文章,第二篇文章的内容
第三篇文章,第三篇文章的内容
从结果可以看到,每个标题信息均与所有的内容进行了匹配连接。它实际上返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数,即3×3=9条记录,这与前面介绍的例子实例的执行过程分析相吻合。
多表连接
前面通过一个实例介绍了两个表的连接,实际上,SQL的SELECT语句中可以实现任意多个表的连接。船检连接的基本规则于已经举例过的两个表的连接相同,即在FROM子句中列出所要连接的表,在WHERE子句中指明连接关系,这里我在举一例:
SELECT
PE_CommonModel.Title,
PE_U_Article.Content,
PE_Nodes.NodeName
FROM
PE_CommonModel,
PE_U_Article,
PE_Nodes
WHERE
PE_CommonModel.GeneralID = PE_U_Article.ID AND
PE_CommonModel.NodeID = PE_Nodes.NodeID
此列中,PE_CommonModel表、PE_U_Article表、PE_Nodes表的连接过程可以按一下方式理解。
●从PE_CommonModel表中得到Title(标题)
●通过GeneralID(全局ID) 和ID(文章ID)与PE_U_Article表相关联,从而从PE_U_Article表中得到Content(内容),Content(内容)于PE_CommonModel的GeneralID(全局ID)对应。
●通过PE_CommonModel表中的NodeID(节点ID)和PE_Nodes表中的NodeID(节点ID)与PE_Nodes从PE_Nodes表中得到NodeName(节点名称)
通过两个范例,可见表的基本连接,只要遵守下面的两个基本原则即可
★FROM子句中应列出所有连接的表名
★WHERE子句应定义连接的关系条件
(前台相关的数据表之间关系,在页尾可以看到,我已经整理列出方便大家查阅)
知识扩展:
前面介绍的表连接,是通过FROM子句列出要连接的表、WHERE子句列出连接条件来实现的。也可以在FROM子句中,通过连接关键字实现表的连接,这样有助于将连接操与WHERE的搜索条件区分开来。我们需要采用JOIN关键字来建立连接。JOIN关键字分为四种:自然连接、内连接、外连接、和交叉连接。其中外连接又分为左连接、右连接、左外连接、又外连接。这里我仅仅为大家列出内连接的使用方法。
内连接
内连接要成为等同连接,返回的结果集是两个表中所有匹配的数据,而舍弃不匹配的数据,也就是说,在这种查询中,DBMS只返回来自源表中的相关行,即查询的结果表包含的两源表行,必须满足ON子句的搜索条件。来看我们的范例一是如何通过内连接来实现:
SELECT
PE_CommonModel.Title,
PE_U_Article.Content
FROM
PE_CommonModel
INNER JOIN PE_U_Article ON (PE_CommonModel.GeneralID = PE_U_Article.ID)
在来看看范例二如何通过内连接来实现:
SELECT
PE_CommonModel.Title,
PE_U_Article.Content,
PE_Nodes.NodeName
FROM
PE_CommonModel
INNER JOIN PE_U_Article ON (PE_CommonModel.GeneralID = PE_U_Article.ID)
INNER JOIN PE_Nodes ON (PE_CommonModel.NodeID = PE_Nodes.NodeID)
通过连个内连接的例子,我们总结一下INNER JOIN的语法:
SELECT 列
FROM 连接表
INNER JOIN 连接表
ON (表之间的连接关系)
上面的篇幅讲解了表与表之间的关系,以及如何连接多个表进行查询,下面我列出动易® SiteFactory™ 前台相关数据表关系