2009-04-08 11 views
1

データをDBに挿入する前にデータをフォーマットする方が良いかどうか、またそれを引き出すのは決して決してできません。データをデータベースに挿入する前または挿入後にフォーマットしますか?

私はデータのサニタイズについては言及していません。私たちは皆、SQLインジェクションから保護することを知っています。私は、ユーザーがあなたにURLを与えて、その前にhttp://を持っていないかどうかについて話しています。大きなテキストの書式設定のような、より複雑なものはどうでしょうか。前または後にHTMLでマークアップ(またはストリップ)したいですか?後で気が変わって別のフォーマットをしたい場合はどうすればいいですか?既にフォーマットしていればこれを行うことはできませんが、フォーマットされていない状態で保存することはできますが、DBからデータを取り出すたびに余分な作業をしています一度やってしまったのです。

あなたの考えは?答えから


、URLや電話番号、電子メール(明確に定義されたフォーマットを使って何)のようなものは、一貫性のある形式に最初に正規化されるべき一般的なコンセンサスがあるように思われます。テキストのようなものは、柔軟性を最大限にするために、生のままにしておくか、操作可能な形式にする必要があります。速度が問題であれば、両方のフォーマットを保存することができます。

答えて

6

URLを正規形に正規化してから挿入しても問題ありません。任意の種類の広範なフォーマットを実行する。 HTML変換/解析などは私を悪い考え方にしています。特に、後でプレゼンテーション形式を変更したい場合は、データベース内で「生の」データを常に使用できます。

すべてのクエリで不要な後処理を回避する観点から、より高価な操作のためにオブジェクトキャッシングまたは類似の手法を採用する可能性があります。

11

私は、データベース内のデータが可能な限り一貫したフォーマットであることを確認することをお勧めします。このデータを使用して複数のアプリを使用している可能性があります。すべて同じ形式であることを確認できる場合は、すべてのアプリケーションで異なるフォーマットを再フォーマットすることを心配する必要はありません。

+0

+1:データベースは完全に一貫していなければなりません。 –

+0

+1:データを取得して他の場所で再利用することが重要であり、データがWHERE句になる可能性がある場合はCRITICALが重要です。 – ojrac

1

私の意見では、最初にフォーマットする必要があります。挿入の代わりに取得時に実行することを選択した場合、他のアプリケーション/スクリプトが同じデータベースからデータを使用したい場合、問題が発生する可能性があります。彼らはすべて、データを取り出すときにデータをクリーンアップする方法を知る必要があります。

1

ことeveryhtingがあるので、それはそれらを取り除く意味するかもしれないなど、あなたが明確に定義された項目を実行している場合、

を依存SSN、郵便番号、電話番号、それは(これは必ずしもダッシュやドットを含めることを意味しませんフォーマットされた保管します一貫性のある。

1

あなたはそれを保存する前にデータを変更した場合、あなたはいつもあなたが戻って元のユーザーに、彼らはあなたを与えた正確なテキストをエコーする必要がある状況に実行することができます。非常に注意する必要があります。

+0

それはどんな状況ですか?どのくらいの頻度であなたはそれらにぶつかりますか?私はどんなATMも考えることができないので、私は実際にそれを私のデザインに組み込む傾向はありません。 –

+0

私がそれに遭遇したケースは、製品SKUのケースでした。最初のリクエスタにSKUをフィードバックする必要のあるEDIプロセスがあり、大文字と小文字が区別されるシステムがありました。 –

3

ここでは2つの質問をしています。

正規化は、データベースの挿入前に常に実行する必要があります。列にURLしかない場合は、最初に正規化する必要があります。

フォーミングについては、これはビューの問題であり、モデル(この場合はDB)の問題ではありません。

1

私の傾向は、通常、可能な限り最も柔軟な形式でデータを保存することです。たとえば、数値型ではなく文字列では算術演算を行うことができるので、数値は文字列ではなく整数型または浮動小数点型を使用して格納する必要があります(数値を文字列に解析しても問題はありません) 。おそらくもっと実際的な例:日付/時刻は、文字列ではなくデータベースの実際の日付/時刻データ型を使用して格納する必要があります。また、HTMLをプレーンテキストに変換する方が簡単な場合もあります。その場合は、テキストをHTMLとして保存することをお勧めします。あるいはMarkdownのような形式を使ってHTMLやプレーンテキストに簡単に変換することもできます。

ベクターグラフィックスフォーマット(SVG、EPSなど)が存在するのと同じ理由があります.SVGファイルは、基本的に画像の描画方法を指定する一連の命令です。ビットマップイメージを任意のサイズのビットマップイメージに変換するのは簡単ですが、ビットマップイメージのみを使用する場合は、品質を損なうことなくサイズを変更する(サムネイルを作成するなど)のが難しくなります。

1

フォーマットされたバージョンとフォーマットされていないバージョンの両方を保存することができます。たとえば、アメリカの電話番号を例に挙げてみましょう。 1つの列だけを数字と1つの列を(111)111-1111のような最も頻繁に必要な形式で保存すると、特殊なケースのクライアント仕様書を容易にフォーマットできます。鋳造のこれは挿入時に非常に余分な時間を要しません(そして、計算された列で達成できるので、データがどこに由来しても常に起こります)。

無効な日付または非数値データなどがフィールドに入力されないように、データをデータベースに格納する前にデータをスクラブする必要があります。電子メールは、何らかの理由で人々が頻繁にジャンクを入れる分野です。 @記号がない場合は、格納しないでください。これは、実際にそのフィールドを使用してアプリケーションを電子メールで送信する場合に特に当てはまります。私が何を意味するのかを知るには、彼の秘書やaol.comに電子メールを送ろうとするのは時間の無駄です。

フォーマットが一貫して必要な場合は、挿入または更新時にそのフォーマットにデータを変換し、再度変換する必要はありません。標準形式が変更された場合、その時点で既存のすべてのレコードの列を更新し、次に新しい形式を使用する必要があります。フォーマットやサイズの大きなテーブルを頻繁に変更したり、異なるアプリケーションで異なるフォーマットを使用している場合は、フォーマットされていない状態で保存することをお勧めします。

関連する問題