0

データソース固有の制限を適用することに関して推奨される方法はありますか?

たとえば、MySQLのドキュメントに記載されている255または65535Stringの制限を超えるが保存されたときに、アサーションを設定したり、例外をスローしたりします。または、これをデータソースで処理する必要がありますか?

http://dev.mysql.com/doc/refman/5.0/en/char.html

VARCHAR列の値は可変長の文字列です。長さは、MySQL 5.0.3以前は0〜255、5.0.3以降のバージョンでは0〜65,535の値として指定できます。MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(65,535バイト、すべての列で共有される)と使用される文字セットの影響を受けます。セクションE.7.4「テーブルの列数と行サイズの制限」を参照してください。

4

1 に答える 1

1

データ アクセス レイヤー内で実行する必要がある検証は、特定のデータベース スキーマ用に定義されたものだけです。データ アクセス層をスキーマのオブジェクト表現と見なすことができます。合理的に可能な限り、スキーマの構造、データ型、および制約を模倣する必要がありますが、それ以上のものはありません。したがって、次の簡単なスキーマが与えられます。

CREATE TABLE `users` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `user_name` VARCHAR(64) NOT NULL,
    `passwordHash` VARCHAR(256) NOT NULL,
) ENGINE=InnoDB, DEFAULT CHARACTER SET utf8;

データ アクセス レイヤーで、次のことを検証します。

  • プロパティは保存前に設定され、userName長さが 64 文字以下の文字シーケンスです
  • プロパティは保存前に設定され、passwordHash長さが 256 文字以下の文字シーケンスです

ただし、非常に重要なことは、特定のデータベース実装にのみ関連付けられているチェックを厳密に回避する必要があることです。1 つは、データ アクセス レイヤーをプロバイダーに依存しないようにすることです。2 番目に、これらのベンダー固有の制限のほとんどは、テーブルを作成しようとした瞬間に発生します。

于 2013-03-23T22:19:22.603 に答える