2

これがばかげた質問である場合は申し訳ありません。しばらくゲームから離れていました。

Web アプリに PostgresSQL を使用するかどうかを決定しています。今まで使ったことがありません。調査を行った結果、ストアド関数用の PGSQL 言語が非常に気に入っています。

多くの場合、私の Web アプリ コードでは、レコードを保存しています。これは、レコードが既に存在するかどうかを確認することから成り、存在する場合は更新し、存在しない場合は新しいレコードを挿入します。

PGSQLを使用すると、これらすべてを1つのクエリで実行できます(MysqLとは対照的に、できないと確信しています)

彼らはこれに利点がありますか?または、このロジックは、データベースに格納された関数ではなく、Web アプリ レイヤーに残す必要があります。

PGSQL での大まかな例を次に示します。これは単なる説明であり、安全なコードや優れたコードを意図したものではありません。

CREATE OR REPLACE FUNCTION save_client(IN strforename character varying, IN strnew character varying)
  RETURNS TABLE(forename character varying, surname character varying) AS
$BODY$

    DECLARE myrec int;

    BEGIN   

        SELECT idx_clients INTO myrec from "Clients" WHERE LOWER("Clients".forename)=$1;


        IF NOT FOUND THEN
            RAISE NOTICE 'No results found.%',myrec;

            INSERT INTO "Clients" (forename,surname) VALUES (strnew,strforename);
        ELSE
            RAISE NOTICE 'YES results found.%',myrec;

            IF myrec NOTNULL THEN
                UPDATE "Clients" SET forename=$2 WHERE idx_clients=myrec;
            END IF;

        END IF;

    END;

$BODY$
4

2 に答える 2

0

私は通常、いくつかの理由から、この種の機能をアプリケーションに搭載したいと考えています。

  1. サーバーの負荷 いずれにせよ、データベース サーバーは多くの場合、負荷が高くなりますが、アプリケーション サーバーは通常それほど負荷がかかりません。
  2. テクノロジ実装データベースにとらわれないため、後で MySQL または Oracle に移行することを決定した場合でも、機能を失ったり、再設計したりする必要はありません。
  3. 保守性 コードをデータベースに抽象化すると、他の誰かが自分以外の誰かがコードを保守する必要がある場合、直感的ではなくなります。彼らは、そこにない機能を探すのに時間を費やします。

あなたの主な考慮事項は私のものとは異なる場合があります。データベースですべてを実行することでパフォーマンスが向上すると予想しているため、それが考慮される可能性がありますが、実装を可能な限り技術にとらわれないように常に心がけています.

于 2013-04-19T09:42:40.740 に答える