与我们一起学习或学习过关系数据库的人是不同的.要获得期望的结果,并有效地实现这一点,需要一个乏味的过程,其部分特点是学习不熟悉的范例,并发现我们最熟悉的一些编程模式在这里不起作用.你见过(或自己犯过)哪些常见的反模式?

推荐答案

我一直对大多数程序员在数据访问层混合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格式比在客户端使用SQL Server格式更方便.

如上所示的查询非常脆弱,因为它们将数据层与UI层紧密耦合.除此之外,这种编程风格彻底防止了存储过程的可重用性.

Sql相关问答推荐

数据子集的左连接

按postquist中的日期查询json列

R中对Arrow duckdb工作流的SQL查询

仅 for each 唯一ID返回一个元素,并仅返回最新连接的记录

检索上一个星期四和上一个星期三

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

基于多参数的SQL Server条件过滤

如何在连接中使用三个不同的列,从而在PostgreSQL中只获得两个列?

将具有嵌套 XML 的列转换为 SQL 中的表格格式?

如何解释 SQL Server 中的 Foxpro 语法?

如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

如何为 ActiveRecord 联接应用附加条件

如何在第二个 INSERT 中使用第一个 INSERT 自动生成的 ID

如何优化仅返回符合条件的三条记录的查询?

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?

PostgreSQL如何将Unix纪元时间戳转换为日期时间并进行拼接

将表格和字符串连接以 for each 记录生成订单项目

使用 GROUP BY 时如何创建其他组?

查找具有相同连接列数据的所有记录

我现在如何显示重复的汽车? postgresql