当前位置: 首页 > news >正文

网站做优化需要哪些后台信息有哪些免费推广软件

网站做优化需要哪些后台信息,有哪些免费推广软件,六安人论坛最新招聘信息,网站字体怎么修改有了主键,也就能够唯一标识一条记录了。然后,我们就能建立不同数据表的记录之间的关联了。先生成两个有主键的表用来做实验,简单起见用整数做主键,但被故意打乱了次序。A2是个部门表,每条记录对应一个部门,…

有了主键,也就能够唯一标识一条记录了。然后,我们就能建立不同数据表的记录之间的关联了。

先生成两个有主键的表用来做实验,简单起见用整数做主键,但被故意打乱了次序。

573c72bff75381bc9c658232f0502ffc.png

A2是个部门表,每条记录对应一个部门,did字段是部门的编号,用作主键,name字段是部门名称;A3是员工表,每条记录对应一名员工,eid字段是员工编号,用作主键,nation是员工国籍。员工表通常还会有姓名字段,但这里没什么用,我们就不生成了。

重点是A3的dept字段和A2的manage字段。dept存储的是一个整数,它代表这个员工所属的部门。员工表中记录e对应的员工的所属部门,就是部门表中以e.dept为主键的记录d对应的部门。我们这时也会说记录e和记录d关联

A2的manager字段表示部门的经理,经理也是个员工,也会出现在员工表中。部门表中记录d对应的部门的经理,就是员工表中以d.manager为主键的记录e对应的员工。我们也说这两条记录d和e关联。

了解一这个关系,A4的作用就清楚了,因为随机生成的数据不能保证经理的所属部门就是本部门,要在A4再调整一下,这样这份数据就可以用了。

现在我们想列出所有R&D部门的人员。

这是个简单的选出问题,应该用select函数。但是,员工表中没有部门名称,只有部门的编号,去部门表中去用编号查出部门名称才能做选出。

dbd366df975579e90554840b02fe927f.png

类似地,我们还可以列出所有经理是美国人的部门:

73f7bddcc2900670c1e1e7707c18c37a.png

这样我们就把员工表和部门表关联起来了,可以联合使用两个表的信息来做运算。其中员工表中的dept字段,它的取值总是部门表中某条记录的主键,而且也用来代表部门表中的这条记录。我们称这种字段为外键,更完整的说法是员工表中指向部门表的外键。通过外键,可以在针对某个表的运算中引用指向表的关联记录的某些字段,这两个表也就有了外键关联。

同样,部门表中的manager字段也是指向员工表的外键。

主键可能有多个字段构成,对应的外键也可能有多个字段,但相对不太常见,我们这里不再举例了。

当两个表之间有外键的关系时,比如A表的某个字段是指向B表的外键。我们还要知道两个术语:称B表是A表的维表,而A表称为事实表。维表和事实表的关系是相对的,关注员工表的外键dept时,部门表是员工表的维表,而在关注部门表的外键manager时,员工表又是部门表的维表。

维表和事实表在讨论数据库业务时经常会被程序员使用。日常数据处理中不大使用这种太学术化的词汇,但还是知道一下更好一点。

数据库的术语中,还会说外键关联是多对一的关联,也就是可能多条事实表记录与同一条维表记录关联。

外键也不是个陌生的概念。维表就是我们常常使用的代码表,把一些经常要被引用的事物的属性列到一个代码表中,并给一个编码(也就是主键)来标识,在引用时就只用这个编码(也就是外键),更详细的信息则用这个编码到代码表中去查询。

比如电话号码上会挂着机主姓名、地址、…等信息,而通话记录中就只有电话号码了。电话号码是通讯录的主键,通话记录中的电话号码就是指向通讯录的外键。通讯录是通话记录的维表,通话记录是事实表。在针对通话记录的运算中经常可能使用到电话号码相关的信息,比如查询北京地区打出的电话有多少等,这就用外键去寻找关联记录的字段。

其它像银行帐户与银行交易记录、商品信息与买卖记录、…都是这种情况。

针对事实表的运算中使用到维表信息是很常见的事情,为什么我们不把要用到维表字段直接抄录到事实表中呢?

有过这种代码表处理经验的读者都会知道答案。维表的信息内容很多,如果都抄到事实表中,事实表会被搞得很大,占用很多存储空间,导致性能低下;而且,维表很可能会变,比如部门名称、机主地址等,如果都抄到事实表中,一旦发生改变,事实表都要更新,而事实表通常巨大得多,这就会非常麻烦和低效。如果是独立的维表,那只要修改维表,事实表运算时临时来取维表字段,总能得到最新信息。

理解了概念,我们继续。现在把员工编号(没生成姓名字段,就用编号代替了)和所属的部门名称列到成一个表:

957dbf871fcb9f5aa2bc7d182eda63d3.png

这个很像Excel里的VLookup函数,代码表就是这么用的。

但是,总是使用find来写显然非常麻烦,而且每次都计算的效率也很差,比如再一步,想把员工所属部门的经理的编号也列上,就得把这个find写两遍。

d0d2007f2cca75c2d246ab5d08e691cd.png

这就更像VLookup了,Excel要引用关联表格的两个列就得写两遍VLookup。

SPL显然不会没考虑到这个问题,这种对于结构化数据来讲属于家常便饭的操作不能搞得这么麻烦。SPL提供了switch函数来实现外键的关联运算:

34444e50bbf60751fb7d26d776393d74.png

switch函数将把外键字段转换成对应的维表记录,A5的代码相当于执行了一句:

>A3.run(dept=A2.find(dept))

执行A5前看A3的值(可以使用调试功能),是下面这样,dept字段是整数:

4c8b988bc339262cb43aaa41ff4c87cc.png

执行之后再看A3,dept字段看起来仍然是整数,但变了颜色也显示到左边了:

b462d77eb0c8d87ba863cd9c2f9eb918.png

双击某个dept的值,值显示区域可能出现这样的结果:

fc34778e223d825e55613d2e6060a588.png

dept字段的取值已经变成记录,双击它后将显示这条记录的详细信息。刚才显示的变了颜色的数值实际上是这条记录的主键。

即然是记录,那么当然就可以引用它的字段了,A6中的dept.name和dept.manager就都能正常计算了。

之所以用switch这个函数名,是因为它还可以把取值为记录的字段转换回来:

0dd2fa905659a9295bfa77952baf661e.png

A5将外键转换成维表的记录,A6就可以使用它引用维表记录的字段了,到A7又将现在取值为记录的字段再转回来,A7相当于执行了

>A3.run(dept=dept.key())

不过,转换回来的情况很少见。

被switch处理过后,这两个表的记录感觉真地连到了一起,这个表的字段取值是另一个表的记录,可以通过这个字段去引用另一个表的字段了。这比VLookup方便了许多。

相应地,部门表中的manager字段也是外键,也可以转换成人员表中的记录。

比如,我们想统计有多少男员工的经理是女性:

bc7cbb053a86586faad2905062c0e9ff.png

外键关系可能有多层,这时候如果还使用find方法,就会很难描述(有兴趣的读者也可以尝试想想Excel中如何用VLookup实现这种多层关联)。被switch转换之后的外键,点操作符可以形象地理解成“的”,A6中的dept.manager.nation可以解读为当前员工的部门的经理的国籍,很多层次也不会觉得困难,这样的语法即书写简单也容易理解。

通常,外键字段的取值一定会在维表的主键取值范围内,但有时候也会出现超出的情况。比如新员工在尚未确定所属部门前,dept字段都被填成了0,部门表中没有对应的记录。

0c729a30a8370b6809f4f3099a596ff0.png

我们在生成数据的代码B4中故意找了一些员工的dept填成0,然后可以观察这三种A5分别会计算出什么结果。注意要分别执行,不能顺序执行,因为执行完之后A3将会被改变,再继续执行另一种A5就没有意义了。

switch找不到外键对应的维表记录时会将外键填成null,之后再引用其字段时并不会报错,只是会返回null,相应的B5将不会为0。@i选项将删除找不到外键对应记录的事实表记录,保证switch之后的事实表记录的外键都正确转换成维表记录了,相应的B5将返回0。而@d则将只保留找不到外键对应记录的事实表记录,并且无法再做外键转换,相应的B5就会报出错误。

使用外键关联两个数据表,经常是为了将维表的某些字段临时拼到事实表上(也就是VLookup干的事),大多数情况并不打算改变事实表的字段。switch函数用来进行关联运算虽然方便,但它却会改变原事实表的外键字段值,如果只是想追加维表字段的话,使用switch后还要再多做一步转换将已经变成记录的外键再转换回来,这就比较麻烦了。而且,如果再碰到刚才说的有对应不上的情况,外键将被填成null,信息已经丢失,无法转换回来了。

SPL提供了join函数来实现这种目标:

64ad205d81958665c6be8bf7d7d7f9ee.png

A5将在序表A3的基础上增加deptname和manager字段,分别填入员工的部门名称和经理编号,dept字段将保持原样,找不到对应的维表记录时,会导致新加入的字段填成null。

join函数会产生一个新序表,原来A3并不会改变。

join函数还可以支持多字段的主键和外键,因为不常见,这里不再举例了,需要使用时可以查阅SPL的相关文档,也能再体会层次参数的必要性。

switch函数不支持多字段主键的维表,它只能转换单字段外键。

使用外键到维表中查找对应记录,以引用关联记录的某些字段,这是很常见的情况。不过,业务是复杂的,有时关联记录并不能简单用外键来确定,而需要一个与区间有关的条件。

回到前面章节中常用到的人员表,并造一个BMI对照表:

7242c1b8f6080ee3484490b59ddfdd29.png

现在我们想在有BMI信息的人员表A2上加个字段,列出每个人的体重类型。

如果把BMI对照料表A3作为维表(有要被引用的字段),它有low和high字段来表示某个体重类型的BMI区间,但并没有什么适合作主键的字段(虽然low和high都有唯一性)。人员表A2中看起来也没有字段可以充当外键。但是,显然A2和A4会存在一种关联,A2的每条记录都会和A4的某条记录对应。

区间关联也是一种常见的关联,那么它该怎么实现?

简单地使用select函数当然可以,类似本节开始使用find一样。

3e2e4b18227fab7eb017810697a96d77.png

这里要判断high是空的情况(表示最后一段),low不用判断,因为SPL规则null是最小的,null<=bmi总会得到true。

其实,区间关联也能被理解为外键关联。如果我们把BMI对照表做一些改造,再在人员表增加用pseg函数计算出来的BMI区段序号,就可以看出外键关系了。

f7a2edba4adf8e24189307c0efb30fae.png

经过改造的BMI对照表A3有了主键,可以作为维表。A5增加出来的bmitype字段则是指向A3的外键,也可以用switch建立关联。

区间关联本质上也是外键关联。

为人员表单造一个外键实在有点麻烦,其实我们写成上面这样主要是为了帮助读者理解外键概念可以延伸到这种情况。实际上会直接用pseg拼出目标字段。

b18dd5d4267f921df47d89b452716d20.png

区间关联过程一般都不会专门生成外键,但仍然可以延用维表和事实表的概念。

如果情况像这个例子这样只有type字段需要被引用,我们甚至都不会生成那个对照表了,而是直接用序列和pseg来计算并引用。

a51696edccf0fd57a5653d98bba4d9ff.png

和所有外键关联一样,区间关联也是多对一的关联。即使没有生成维表,这个关联关系仍然在逻辑上存在。

http://www.lbrq.cn/news/2448019.html

相关文章:

  • 朔州建设机械网站网站推广互联网推广
  • 好的网站模板企业文化培训
  • 协会类网站免费模板百度seo优化服务
  • 南通网站建设团队怎么做免费的网站推广
  • 杭州做网站博客千锋教育郑州校区
  • 做网页设计可以参考哪些网站百度新闻官网
  • 域名连接到网站吗企业邮箱格式
  • 微网站趋势搜索引擎优化好做吗
  • 男人和女人在床上做那个网站qq群推广链接
  • hexo做网站热门网站
  • 郑州电力高等专科学校电话seo岗位工资
  • 国外真正的永久免费建站网站友情链接连接
  • 做网站价格报价费用多少钱刺激广告
  • 租服务器的网站中国市场营销网网站
  • 湖州 网站建设营销方式有哪几种
  • 织梦网站做视频重庆森林影评
  • 广西中小企业网站建设外贸网络推广公司
  • 易语言如何做浏网站网络客服
  • 黄岛建设厅官方网站竞价推广营销
  • 网站上打广告培训机构加盟
  • 常州做网站咨询广告公司网站
  • 贵阳市城乡建设部网站seo应用领域有哪些
  • 服装网站建设规划书范文企业网站页面设计
  • 不同网站对商家做o2o的政策互联网营销的方法有哪些
  • 英文网站建设知识怎么注册网站免费的
  • 婚宴网站源码网站百度手机端排名怎么查询
  • 网站设计机构介绍网络营销
  • 网站项目建设流程图百度推广手机客户端
  • 全网vip影视网站一键搭建有效的网络推广
  • 腾讯云服务器可以做网站爱站网seo工具
  • 智慧水库管理平台数据清洗实施方案
  • 小架构step系列26:Spring提供的validator
  • 【Redis】Linux 配置Redis
  • 嵌入式硬件篇---zigbee无线串口通信问题解决方法
  • C/C++---I/O性能优化
  • PyCharm高效开发全攻略