(06)字段趣事多

    不管是做表设计,还是维护数据库,而关于字段和表,我还真碰到过很多有意思的。精巧的就留着压箱底了,咱在这仅举一些不良的例子说说.

 案例1 .  万能字段
      开一个万能字段,把varchar2加得很大,然后把程序构造的字符串记录到这个中。以后有什么变化也不用加字段了,全向里面加。 这种方法我以前听过,听说曾经流行,没想到最近又见到了。一个用 C++开发的项目就用这样弄。 把协议传过来的字符串这样保存,然后select配合like '%xx%'查出结果到MFC界面读取后再一顿狂解析,再展示成listview或报表。这样搞真是无语了。

 案例2.  为了速度,乱开冗余字段
       我见过一个惨痛的案例,某公司的数据库为了防止xxxx查,放在了HK那边,老板又省不得出钱,造成这边访问时速度很慢, 反应很大.开发在想尽办法后,发现物料表的访问量很大,特别是“物料名称”这个字段到处都有用到,而物料表本身数据量也相当大。所以他们认为,在每个用到物料名称的表上,加上物料名称这个字段,就能大大提高速度了。他们也确实这样做。
      很好,当时的效果好像很不错,速度提升很明显。 但运行一段后就发现,数据库完全乱套了,系统上的各个物料,打印出的报表,很多物料都对不上了。 原来因为这个字段用到的地方太多了,而开发的程序改得并不那么好,很多物料名称的中途变更并不能那么完美的在其它模块体现出来。
      只能说,为了提高速度,适当的用一些开冗余字段等方式有时是可行的,但一定要在可控范围内。如果线上系统这样的更改,一定要做好测试工作再上。

 案例3. 字段的命名很奇怪,
        有英文与拼音共存的,有用无意义的字来命名,还有些把名字取得超长,这,写代码时不痛苦吗?
        嗯,还有关于取中文字段名的我前面的文章已经说过了。最后还有一种,使用保留字命名字段的,使用时带来很大的麻烦。

 案例4.  表结构设计不合理,乱开字段。
       有得没得开一堆 a1....a12,b1....b12之类的字段在一个表上。
    像Oracle ERP或QAD之类商业ERP的表结构可能会在一些表上开一些字段做为用户自定义字段,是有道理。
     但有些做表设计时,则不同,他们会在开表时可能依照某一张实际的报表来开,而刚好这张报表是横向显示的,
     他们就照着这样设计,有几个栏位就开几个字段。

案例5. 明知道Varchar2的好处,仍坚持用char的
    varchar2与char的区别,做数据库的应当清楚,但有些旧系统的表结构用得是char,人们在升级时有顾虑不想动,情有可原,但
新增加的表结构也这样弄,为了一致而一致就有点想不明白了。

案例6. 不恰当的用 BLOB 
    这个真是个折磨。 在有些业务上用blob存一些证件像之类是没问题的。但有人把这个功能放大了,好家伙,把什么文档都向上面存。 一方面使数据库急剧澎涨。另一方面blob显示到界面的响应速度并不令人满意。 对于这种blob类型,在使用前一定要搞清楚需求,是否真有必要,如有些为了安全性考量一定要这样做那就没有办法,否可以采取其他方法达到这个效果。
    方法一:  只在字段中保存文件路径,然后将保存文件的目录共享给应用,使其能访问。问题是这种安全性不太高。
    方法二:  采用Oracle的 BFILE 类型,也能达到同样的效果,且没有了使用急剧澎涨的隐患。
    
案例7.字段无人认领。
    这个在上线过一段时间的系统中有时会见到,有些字段里面有一些值,甚至有建索引,但好像又没看到有地方用到。 
 常是DBA问开发,开发问DBA,都说不清楚, 直到某人一拍脑袋,记起来了, 好像以前有个什么业务逻辑有用到过。
或因为某个临时原因加的,现在已经没有用了。甚至出现某些表都会无人认领的情况。
 文档没即时更新,人员变更,业务变更,维护不留意等都是造 成这种现象出现的原因。唉.


我暂时记起了这么多,印象中现在这些现象越来越少见到了,这真是好事。 另外,不知你们有没见过更有趣的? 欢迎补充啊。

MAIL:xcl_168@aliyun.com
Blog:http://blog.csdn.net/xcl168

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: distinct多字段指的是在数据库中使用distinct关键字来从多个字段中去重数据。通常情况下,我们使用distinct关键字来去重一个字段的数据,但是有时候我们需要根据多个字段的组合来去重数据。 举个例子,假设我们有一个格存储了学生的信息,其中包含了学生的姓名和年龄字段。现在我们需要统计不同姓名和年龄组合下的学生人数。这时候我们就需要使用distinct多字段来实现。我们可以使用以下SQL语句来获取不同姓名和年龄组合的学生人数: SELECT DISTINCT name, age FROM students; 这条SQL语句将返回不同姓名和年龄组合的学生人数,并且去除重复的组合。比如,如果有两个学生的姓名都是张三,年龄分别是18岁和20岁,那么这个结果集中只会包含一条记录,即张三和18岁的组合。 通过使用distinct多字段,我们可以根据多个字段的组合来对数据进行去重,以满足特定的数据分析和统计需求。同时,需要注意的是,distinct多字段可能会对查询效率有一定的影响,因此在使用时需要根据具体情况进行权衡和优化。 ### 回答2: distinct多字段是指在数据库查询中,根据多个字段的组合来去除重复的记录。通常情况下,我们使用distinct关键字来在查询结果中去除重复的记录。在使用distinct关键字时,可以针对一个字段进行去重,也可以针对多个字段的组合进行去重。 举个例子来说,假设我们有一个学生成绩的格,其中包含学生的姓名、科目和成绩。如果我们想要查询学生的科目和成绩的组合,但是不希望出现重复的记录,就可以使用distinct多字段的方式进行查询。例如: SELECT DISTINCT subject, score FROM student_scores; 这样就可以得到一个包含所有学生科目和成绩组合的查询结果,而且结果中会去除重复的记录。 需要注意的是,当我们使用distinct多字段时,数据库会根据指定的多个字段的组合进行去重。也就是说,只有当多个字段的值都相同时,才会被认定为是重复的记录。如果某个字段的值不同,即使其他字段的值相同,数据库也会将其视为不同的记录。 总结起来,distinct多字段的使用可以帮助我们在数据库查询中根据多个字段的组合去除重复的记录,以得到更加准确和合理的查询结果。 ### 回答3: distinct多字段是指在查询结果中去除重复记录的同时,以多个字段的组合作为判断依据。在使用distinct关键字时,通常是针对单个字段进行去重操作,但是在一些情况下,我们需要根据多个字段的组合来进行去重。 举个例子,假设我们有一张学生信息,其中包含学生的姓名、年龄和性别等字段。如果我们想要查询出所有不重复的学生,一般可以使用distinct关键字来去除重复姓名的记录。但是,如果我们希望在去除重复记录的同时,还要根据学生的年龄和性别进行判断,就需要使用distinct多字段。 使用distinct多字段的语法非常简单,只需要在distinct关键字后面加上需要去重的字段名即可,多个字段之间用逗号分隔。例如,我们可以使用如下语句来查询出所有不重复的学生记录: SELECT DISTINCT 姓名, 年龄, 性别 FROM 学生信息; 这样就可以根据姓名、年龄和性别的组合来判断记录的唯一性,去除重复的学生记录。 需要注意的是,使用distinct多字段可能会增加查询的复杂性和执行的时间。因为数据库需要对多个字段组合进行比较,在字段较多或者记录较多的情况下,可能会增加查询的开销。因此,在使用distinct多字段时,需要根据具体情况来综合考虑性能和查询需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值