1. ホーム
  2. sql

[解決済み】最も一般的なSQLアンチパターンは何ですか?[クローズド]。

2022-04-03 18:32:51

質問

リレーショナル・データベースを扱う私たちは皆、SQLが他とは違うことを学んできました(あるいは学びつつあります)。目的の結果を引き出し、それを効率的に実行するためには、見慣れないパラダイムを学習し、最も馴染みのあるプログラミングパターンのいくつかがここでは機能しないことを知るという、退屈なプロセスが一部含まれます。あなたが見た(あるいはあなた自身が犯した)一般的なアンチパターンは何ですか?

解決方法は?

私は、ほとんどのプログラマーがデータアクセス層に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レイヤーを密に結合しているため、非常にもろいです。その上、このスタイルのプログラミングは、ストアドプロシージャの再利用を徹底的に妨げます。