为了账号安全,请及时绑定邮箱和手机立即绑定

什么是最常见的SQL反模式?

什么是最常见的SQL反模式?

慕莱坞森 2019-09-18 10:29:28
我们所有使用关系数据库的人都已经学习(或正在学习)SQL是不同的。引出期望的结果,并且有效地进行,涉及一个繁琐的过程,其部分特征是学习不熟悉的范例,并发现我们最熟悉的一些编程模式在这里不起作用。您见过(或自己承诺)的常见反模式有哪些?
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我一直对大多数程序员在数据访问层中混合UI逻辑的倾向感到失望:


SELECT

    FirstName + ' ' + LastName as "Full Name",

    case UserRole

        when 2 then "Admin"

        when 1 then "Moderator"

        else "User"

    end as "User's Role",

    case SignedIn

        when 0 then "Logged in"

        else "Logged out"

    end as "User signed in?",

    Convert(varchar(100), LastSignOn, 101) as "Last Sign On",

    DateDiff('d', LastSignOn, getDate()) as "Days since last sign on",

    AddrLine1 + ' ' + AddrLine2 + ' ' + AddrLine3 + ' ' +

        City + ', ' + State + ' ' + Zip as "Address",

    'XXX-XX-' + Substring(

        Convert(varchar(9), SSN), 6, 4) as "Social Security #"

FROM Users

通常,程序员这样做是因为他们打算将他们的数据集直接绑定到网格,并且它只是方便SQL Server格式服务器端而不是客户端上的格式。


如上所示的查询非常脆弱,因为它们将数据层紧密耦合到UI层。最重要的是,这种编程风格彻底防止了存储过程的重用。


查看完整回答
反对 回复 2019-09-18
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

  • 人类可读的密码字段,egad。自我解释。

  • 对索引 列使用LIKE,我几乎总是想说LIKE。

  • 回收SQL生成的PK值。

  • 惊喜没人提到神表。没有什么比100列的位标志,大字符串和整数更像“有机”。

  • 然后是“我想念.ini文件”模式:在大文本字段中存储CSV,管道分隔的字符串或其他解析所需的数据。

  • 而对于如何使用游标的MS SQL服务器在所有。有一种更好的方法来执行任何给定的游标任务。

编辑,因为有这么多!


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 690 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信