ホームページ  >  記事  >  WeChat アプレット  >  Oracle プログラム開発のヒント

Oracle プログラム開発のヒント

高洛峰
高洛峰オリジナル
2017-02-11 11:14:301860ブラウズ

Oracle には多くの利点がありますが、不適切に使用すると、その強力な利点が発揮されなくなります。ここでは、私が Oracle の開発プロセスで蓄積したちょっとした経験を皆さんと共有します。

1. データベース設計におけるフィールドの使用

一部のテーブルの設計では、基本的に標準となっている、これらのフィールドの痕跡がよく見られます。フィールドの名前は異なる場合があります。一般的に使用されるフィールドは、次のカテゴリに分類されます:

1.WHO フィールド

このタイプのフィールドは、主に、このレコード行を追加した人、変更を加えた人など、レコードの各行の操作変更情報を記録するために使用されます。詳細な説明は次のとおりです:

フィールド名

タイプ

説明

LAST_UPDATE_DATE

DATE

最終更新日

LAST_UPDATED_BY

NUMBER( 15)

最終更新者

CREATION_DATE

DATE

Created_BY

CREATED_BY

NUMBER(15)

クリエイター

I.作成者

通常、ログイン後、権限の確認とログインのプロセスがあり、ログイン者の情報がデータベース内の特定のテーブルに追加されると、その ID がシステムのメモリに記録されます。演算子の値は、後の統計と監査のために同時にテーブルに書き込まれます

II.作成時間

は、作成時に、このフィールドの値が通常、クライアントではなくサーバーから直接取得されるという意味に似ています。このフィールドの値として SYSDATE を使用します

III.最終変更者

レコードが作成された後、後で監査を容易にするために変更された人のレコードも必要になります。

ただし、ここで注意すべき点は、レコードが複数回変更された場合、途中の変更は追跡できないことです。詳細な変更情報を記録する必要があります。フィールドの機能を超えたログ機能を使用します。

IV.最終変更日

は、最終変更者と同時にレコードに書き込まれます。同様に、途中の変更はすべて最終変更によって上書きされます。

2. ステータスと有効性のフィールド

一部のニュース コンテンツには適時性が関係していることがよくあります。つまり、ニュースの一部は特定の期間内にのみ外部の世界に表示され、それを超えて公開することは許可されません。一部のコンテンツに問題があり、外部から一時的にブロックする必要がある場合、詳細な説明は次のとおりです。

フィールド名

タイプ

説明

ステータス

番号

ステータス

START_DATE

DATE

有効な開始日

END_DATE

DATE

有効な終了日

私。ステータス

このフィールドは一般に数値型で表され、0 は無効を意味し、1 は有効を意味します。 もちろん、使用する場合、これら 2 つの値はエスケープされて「有効」と「無効」として表示されます。保管方法に影響します。

無効化とは削除を意味するものではなく、有効期限が切れたコンテンツは管理プログラムにより調整され、ステータスが有効になると通常の使用に戻すことができます。

II.有効な開始日

このフィールドに特定の値が入力されている場合、情報はこの日付を超える場合にのみ有効になります。この日付より前の場合、情報は自動的に無効として扱われることに注意してください。フィールドが設定されている場合は、この条件チェックをスキップして処理する必要があり、プログラムの柔軟性を実現できます。

Ⅲ.有効期限

具体的な意味は上記と同じですが、この期間を過ぎるとコンテンツは無効として扱われます。

3.論理削除

データベースシステムの削除には、一般に物理削除と論理削除の2つの方法があります。いわゆる物理削除とは、データベース内でdeleteなどのコマンドを直接使用して、実際にデータベースからデータを削除することです。削除 通常のチャネルではデータを復元できません。全体のデータ量を部分的に減らすことはできますが、監査の追跡には役に立ちません。論理的な削除とは、データをいかなる方法でも削除するのではなく、レコードを特定の方法でマークすることを指します。フィールドに値を割り当てると、このレコードが削除されたことを示します。

データは実際にはまだデータベースに存在しているため、論理削除の処理ロジックはアプリケーション自体によってのみ使用されます。

関係するフィールドは次のとおりです:

フィールド名

タイプ

説明

DELETED

Nアンバー

削除

DELETE_DATE

DATE

DELETED_BY

DELETED_BY

NUMBER

人を削除

私。 削除フラグ

このフィールドには 2 つの値があり、0 は通常を意味し、1 は削除されたことを意味します。

削除マークを付けた後は、すべてのクエリ文の判定条件にdeleted=0という条件も付けないと大きな間違いが発生します。

II. 削除時刻

は、削除時刻を示すために削除フラグと一緒に使用され、現在のサーバー時刻を使用して sysdate を入力できます。

Ⅲ. 削除者

最後の修飾子と同様に、削除の特定の演算子を記録する必要があります

削除はフラグ ビットとは異なりますが、フロントエンドではデータを表示できませんが、バックエンドではフラグ ビット メソッドが使用されます。管理者は管理プログラムを通じて削除を調整することもできますが、削除を確認した後、このレコードはアプリケーション全体に存在しないものとして理解される必要があります。

4. 自動インクリメントフィールド

いわゆる自動インクリメントフィールドとは、使用することで自動的に増加するフィールドを指します。

このフィールドの値には通常、明確な意味はなく、一意の識別子としてのみ使用されます。このフィールドは通常、主キーとして設定されます。

アプリケーションが Oracle のみをターゲットにしており、データベースの独立性を考慮していない場合は、シーケンスが最適な選択です。これまで MSSQL などの他のデータベースを使用していた人にとって、Oracle を使用すると、自動インクリメントフィールドを作成するのに非常に手間がかかります。しかし、そのため、他のデータベースにはない問題も発生します。たとえば、注文システムには注文ヘッダーと注文明細行の両方があり、MSSQL などのデータベースの自動インクリメント フィールドでは、通常、注文ヘッダーが最初に挿入され、次に注文明細行が挿入されます。特定の情報は挿入後にのみ知ることができます。 の ID 値は何ですか。主なことは、シーケンス効果が非常に高く、パフォーマンスの問題を心配する必要がないことです。

5. 柔軟なフィールド

システムを使用すると、通常、フィールドを追加する必要があるため、データベースのテーブル構造を設計するときは、いくつかの予備フィールドを確保しておくことをお勧めします。予約フィールドの利点は、DDL 操作が必要ない場合にのみ有効にできることです。さらに、一般的な DDL 操作によってカスケードされた VIEW/PACKAGE やその他のプログラムが失敗する可能性が非常に低いです。予約済みフィールド エラスティック フィールドを追加すると、この問題は発生しません。

予約フィールドは、タイプに応じて、文字列タイプ、数値タイプ、日付タイプの 3 つのタイプに分けることもできます。各タイプに 10 個のフィールドを予約するか、次のスタイルを使用できます。 NUMBER_ATTRIBUTE1

STRING_ATTRIBUTE1

DATE_ATTRIBUTE1

エラスティック フィールドが有効になっていない場合、そのような大規模なデータベースの構造では、フィールドが実際に使用される場合にのみストレージ スペースが必要になるため、答えはノーです。実際のスペースを占有する場合、それは単なる「説明」であり、実際のスペースを占有しないため、スペースを無駄にすることはありません。

6. 分割フィールド

これはフィールド タイプではありませんが、テーブルを設計するときに、保存するために適切に分割できる大きなテーブルを指します。たとえば、ユーザー テーブルにはログイン名、パスワード、名前を含めることができます。場合によっては、含まれるメンバー属性の数が数百に達することがあります。

データ量が少ない場合は、どのようなストレージであってもパフォーマンスに問題はありませんが、データ量が比較的多い場合は、パフォーマンスの問題を考慮する必要があります。インデックスが適切であれば、データ量がどんなに大きくても、一般的なクエリ速度はそれほど遅くなりません。ただし、インデックスが使用できない特殊な状況では、FTS (いわゆるフル テーブル スキャン) が発生します。小さなテーブルをスキャンするのと、大きなテーブルをスキャンするのにかかる時間はまったく異なります。そのため、テーブル全体をスキャンしても効率が向上するように、大きなテーブルを個別に保存し、よく使用されるいくつかのフィールドを個別に抽出することをお勧めします。より良くコントロールされるようになります。

使用時には、メインテーブルとサブテーブルにインデックスがあり、それらを組み合わせてクエリを実行する限り、その効果は基本的に実際の大きなテーブルと同じですが、パフォーマンスは実際の大きなテーブルよりも確実に少し遅くなります。テーブルの場合は、実際の大きなテーブルと同じですが、パフォーマンスの向上には比較する価値があります。

現在、一部の大規模システムではこの分割方法が採用されています

2. ビューの合理的な使用

ビューは、データを物理的に格納するのではなく、必要なときにのみベース テーブルから呼び出します。使いやすいように SQL をカプセル化するツールとして理解できます。

ビューには多くの利点があります:

1. 便利さ

クエリが非常に複雑な場合、特にこの SQL がプログラム内で繰り返し呼び出される場合、SQL 全体が非常に肥大化してしまいます。プログラムは非常にさわやかできれいに見えます。

2. 柔軟性

テーブルが複数のプログラムから参照されている場合、テーブルの構造が変更されると、すべてのプログラムが対応する調整を行う必要があり、この時点でプログラム内で 1 つだけが参照されている場合、作業負荷は非常に大きくなります。ビューを正しく変更するだけで、すべてのプログラムに問題は発生しません。

3. セキュリティ

ビューにはベース テーブルの限られた数のフィールドのみを含めることができるため、アクセス許可がパブリックの場合、ビューを使用するユーザーはベース テーブルの他の機密フィールドを表示できます。

ビューには多くの利点があります。実際の作業ではビューをさらに使用することをお勧めします。

3. PACKAGE

PACKAGE は、変数、関数、ストアド プロシージャを 1 つのパッケージに含めることができ、すべてのパブリック変数をパッケージ全体で共有できることが最も便利です。

このパッケージのもう 1 つの特徴は、パッケージ内部がどんなに複雑であっても、外部に対しては限られたインターフェースを開くだけで済むということです。

パッケージのこれらの特性は、どのドキュメントにも記載されていますが、ここでは詳しく説明しません。1 点だけ強調します。それは、aspx プログラムが oracle パッケージを参照する場合です。パッケージのステータスが無効から有効に再コンパイルされた場合、IIS キャッシュ レコードのステータスは自動的に更新されず、引き続き無効として扱われる可能性があります。システムエラーが発生します。この種のエラーを回避するために、通常、STATUS という名前のパブリック関数をパッケージに追加します。この関数は単に数値 1 を返します。パッケージの他の関数を呼び出す前に、この関数を呼び出してパッケージの現在のステータスを確認します。 1 が正しく返された場合は、後続の操作を続行できます。戻り値が空の場合は、現在のパッケージに問題があることを意味し、ユーザーに問題の処理を求める対話が行われる可能性があります。トランザクション処理で複数のパッケージの連携が必要な場合、前のパッケージは正常に処理されたのに後続のパッケージが通らないと非常に大変です。トランザクションが不完全になる可能性があるため、このステータスの確認が最も必要です。すべての荷物を事前に確認し、起こり得るすべての危険を事前に排除します。

4. インデックス

インデックスの役割は非常に明白で、特に大規模なテーブルの場合、非常に時間がかかります。アクションなので、高速化するには対応するインデックスを作成する必要があります。

ただし、場合によっては、多数の挿入操作や変更操作、削除操作など、インデックスに悪影響が及ぶことがあります。これは、あらゆる小さなアクションが同時にインデックスを変更し、DML 操作の効率が大幅に低下するためです。多くの Before DML 操作では、最初にインデックスを削除し、操作が完了した後にインデックスを再構築することをお勧めします。これにより、合計時間の点で大幅に時間を節約できます。

Oracle プログラム開発のヒントに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。