記事の内容
記事の正当化といくつかの重要な概念。
1.ディレクトリとバンドル。
1.1。 テーブルの種類。
1.2。 ディレクトリの種類。
1.3。 靭帯の種類;
2.分類の一般化。
2.1。 表形式の分類。
2.2。 回路図形式での分類。
3.分類の適用に関するいくつかのコメント。
3.1。 テーブルの正規化での分類の使用。
おわりに
記事の正当化といくつかの重要な概念
非常に頻繁にトレーニング分野「データベース」に参加しました。 私は一度自分で勉強しました...どういうわけか私は友人や知人のためにコース全体を実施しなければなりませんでした。 トレーニング中に、テーブルとその使用方法を理解する段階ですでに困難が生じていることに気付きました。 多くの場合、最も単純なデータベースを開発できず、開発できません。 テーブルや小さな分類などの概念をより詳細に検討した後、リレーショナルデータベースでテーブルを認識することの難しさはほとんど消えます。 だから!
この記事では、整合性と冗長性の兆候によるテーブルの小さな分類を検討します。 これはどういう意味ですか? これは、リレーショナルデータベースの冗長性を防ぎ(整合性をとる)、整合性を実現するためにどのようなテーブル構造を実行できるかを説明した例を示します。
理解のために、データの整合性と冗長性の簡単な定義を示します。
データの整合性は、このデータのセマンティックな統一性とデータ間の関係(データ間の関係)を失うことなく、1つのデータから他のデータを復元する機能のプロパティです。
データの冗長性とは、テーブルに過剰なデータが存在するデータベースの状態です。
データ変更操作により、データの整合性が損なわれる可能性があります。 データベースで削除および更新操作が禁止されている場合、追加操作の結果としてだけでなく、データを表示するために誤って記述されたスクリプトだけで整合性に違反する可能性があります。
1.ディレクトリとリンク
1.1。 テーブルの種類
構造のタイプによるテーブルの小さな分類についてもう少し詳しく見てみましょう。 テーブルを2つの一般的なビューに分割します。 最初のタイプは参照テーブル、2番目のリンクテーブルです。
図1.ディレクトリとバンドル
表の情報は、2つのタイプに分類できます。 オブジェクト(サブジェクト)を説明する情報、通信、アクション、プロセス、イベントなどを説明する情報
ディレクトリには、オブジェクトとサブジェクト、関係に関する情報が含まれています。 バンドルには、アクション、プロセス、イベントなどに関する情報が含まれています。
バンドルは、参照テーブルから取得したデータを保存します。 オブジェクト(サブジェクト)の説明とその相互作用の説明の際に同じデータを繰り返すことは不利であるため、オブジェクト(サブジェクト)に関するデータは参考書に入力され、データテーブルにはオブジェクト(サブジェクト)のデータは純粋な形式ではなく、それら(外部キー)。 したがって、バンドルは、オブジェクト(サブジェクト)とオブジェクトへのリンク(サブジェクト)自体(外部キー)の相互作用に関するデータを格納します。 これらの「リンク」は、ディレクトリのテーブルの主キーです。 しかし、それについては後で...
参照とリンクの違いは、参照テーブルが独立したものと独立したもの(つまり、一部のディレクトリのデータを読み取るとき、一般にセマンティクスを理解できる)であり、リンクテーブルがほとんどないという事実に表れます。
1.2。 ディレクトリの種類
ディレクトリはいくつかのタイプに分類できます。 これらは、静的ディレクトリ、静的動的ディレクトリ、および動的ディレクトリです。 もちろん、この世界ではすべてが変わる可能性があるため、絶対に静的な参考書に名前を付けることはほとんどできません。 またはほとんどすべて。
静的リファレンスブックとは、オブジェクト、サブジェクト、最初の変更後に変更されない関係、または無視できるほど変更がまれな関係に関するデータを含むリファレンスブックです。
このようなディレクトリの例としては、名前と番号を含む月のリスト、曜日のリスト、季節のリスト、海洋のリストなどがあります...
数 | お名前 |
1 | 一月 |
2 | 2月 |
3 | 3月 |
4 | 4月 |
5 | 5月 |
6 | 6月 |
7 | 7月 |
8 | 8月 |
9 | 九月 |
10 | 10月 |
11 | 11月 |
12 | 12月 |
表1.静的ディレクトリの例
静的動的参照ブックは、関係が参照文字である場合に関係のデータが保存される参照ブックです。 このようなディレクトリには外部キーが含まれる場合があります。
最も成功した例は、体重などの医療データを含むテーブルです。 体重が測定される人のリストは頻繁に変更されません。 しかし、体重のデータは毎日変わる可能性があります。 静的-動的ディレクトリは、意識的に情報を繰り返すことができる唯一のディレクトリです。 別の例は、投稿の給与ガイドです(ジョブコード別)。
位置コード | 給料 | 更新日 |
1001 | 12,000 | 2015/05/02 |
1002 | 17,000 | 2015年2月1日 |
1003 | 11 500 | 2015年2月1日 |
1004 | 25,450 | 2015年2月1日 |
1005 | 10,000 | 2015年2月1日 |
1006 | 6,000 | 2015年2月4日 |
表2.静的-動的ディレクトリの例
動的ディレクトリは、テーブル、オブジェクトに関するデータ、サブジェクトです。これらの関係は頻繁に変更され、他のテーブルで使用されます。 静的ディレクトリからの違いは、静的ディレクトリ内のデータの変更頻度のみです。
そのようなテーブルの例は、プロジェクトのリストです。 実際、プロジェクトを開いたり閉じたりする際のデータは、プロジェクトディレクトリ自体にある可能性がありますが、ほとんどの場合、これは正しくなく、整合性に違反します。 一方、プロジェクトを開いたり閉じたり(一時停止)する変更の履歴を保持すると、データの冗長性を得ることができます。 データの整合性と冗長性は、冬期と夏期だけでなく、長期にわたって互いに苦労します。
プロジェクトコード | プロジェクト | 規制期限 | 追加日 | ユーザー |
PT102 | ウィンドウペインティング | 15 | 2014年1月3日 | 1547 |
PT103 | ドア設置 | 10 | 2014年1月4日 | 9874 |
PT587 | 消火栓の確認 | 2 | 2014年1月4日 | 1456 |
PT588 | ハッチ交換 | 3 | 01/02/2014 | 0147 |
PT133 | チャンネル清掃 | 11 | 2015年2月9日 | 1547 |
表3.動的ディレクトリの例
図2.ディレクトリの種類
1.3。 靭帯の種類
バンドルテーブルは、2つのタイプに分類できます。
これはリファレンスブックです (リファレンスブックはリファレンスではないことをすぐに明確にします。リファレンスブックにはリファレンスを形成するフィールドがありますが、リファレンス内で強調表示できないため、名前が付けられます)。 外部キー、参照ではないデータ、およびディレクトリを形成するが別の参照テーブルに割り当てることができないデータを含むフィールドが格納されるテーブル。
参照リンクの例は、支払いトランザクションのテーブルです。 または、サッカーの試合に関するデータを含む表。
取引コード | 支払人 | 受取人 | 金額 | 日付 | 解説 |
EEVS-doodi4 | 100045 | 57457 | -10,000 | 2014年7月25日 | ブーツで |
UDFD-ioeed9 | 455780 | 10024 | -900 | 06/24/2014 | ヌル |
PEDD-jdksl4 | 144770 | 56698 | -6980 | 2015年1月1日 | ヌル |
FDFE-keiiii0 | 447757 | 1 | 120 | 2014年7月8日 | ヌル |
表4.参照バンチの例
そして束 (はい、ちょうど束)。 これは、参照キーに帰せられない外部キーとデータ(たとえば、論理フィールドの日付や値)だけが格納されるテーブルです。
バンドルの例は、データ処理端末の自動ロギングテーブルです。
ちなみに、ほとんどの場合、データベースに書き込むことができるがディレクトリに含まれていないデータがあるため、外部キーをそれらに一致させることは不可能であるため、バンドルはほとんど使用されないと推測するのは簡単です。
コード | 顧客コード | 検針 | 月 |
2334 | 35643 | 50 | 2015年1月1日 |
2335 | 235673 | 49 | 2015年1月1日 |
2335 | 436345 | 56 | 2015年1月1日 |
2335 | 574733 | 24 | 2015年1月1日 |
表5.束の例
ディレクトリを形成するこれらのフィールドが何であるかを説明する必要がありますが、別のテーブルディレクトリで選択することはできません。 そのようなフィールドの例は、「コメント」、「苦情」、「説明」、「提案」フィールドです。 要するに、人気のある例を挙げれば、ソーシャルネットワークのデータベーステーブルの「メッセージ」フィールドは...
図3.靭帯の種類
2.分類の一般化
2.1。 テーブル分類
テーブルビュー | 説明 | 例 | 長所(+) | 短所(-) |
静的参照 | テーブル。 それからのデータは、他のテーブルに取得されます。 他のテーブルのディレクトリからは、主キーのみを使用できます。 静的参照には、まったく変更されない情報、または無視できるほどまれに変更される情報が含まれている必要があります。 静的参照は、名前、記号、基準、定量的または定性的なインジケータを取得する必要がある場合に参照されます(外部キー)。 その他 | (名前と番号)月のディレクトリ。
企業の倉庫とワークショップのディレクトリ。 ゲームのルールへのガイド。 | DBMSシステムの機能を置き換え、一部のデータをより柔軟に処理できる場合があります。 情報の変更がめったに変更されない場合、重大な結果に対して警告します。 | テーブルがシステムストレージを置き換える場合、任意の構造のテーブルを使用すると速度が低下する可能性があります。
このテーブルには追加の関数と処理を記述する必要がありますが、これらは常に正しく最適化されているわけではありません。 場合によっては、最適化することが不可能です。 |
静的動的参照 | テーブル。 それからのデータは、他のテーブルに取得されます。 他のテーブルのディレクトリからは、このディレクトリの外部キーを使用できませんが、主キーは使用できます。 | 役職別の給与基準。 ハンドブック(靴のサイズ、重量、身長、頭のサイズ)生理学的パラメーター。 これらの会社がサービスを提供し、考慮に入れる会社とマネージャーを含む(マネージャー、会社の)ディレクトリ。 | スキーム「Reference-link」=「Link」+「Static-dynamic reference」に従って柔軟な正規化を許可します。 | リファレンスブックから抽出されたリファレンスブックは、どこにも消えず、リレーショナル接続を持たないため、静的または動的なリファレンスブックになります。 つまり、常に冗長です。 |
動的参照 | テーブル。 多くの場合、他のテーブルのデータが取得されます。 他のテーブルのディレクトリからは、主キーのみを使用できます。 動的参照には、頻繁に変更される情報を含める必要があります。 | 顧客の参照。 サプライヤーのディレクトリ。 取引相手の参考書。 会社のマネージャーのディレクトリ。 労働者のディレクトリ。 学生のディレクトリ。 | 動的なデータを保存し、それらを一意に参照できるようにします。 | ほとんどの場合、累積型と分割しないで、特定の冗長性を作成します。 |
参照リンク | テーブル。 そのデータを他のテーブルに含めることはできませんが、それらに基づいて他のテーブルにデータを作成できます。 | 支払い取引。 販売。 プラント間移動。 輸送のスケジュール。 | スキーム「Reference-link」=「Link」+「Static-dynamic reference」に従って柔軟な正規化を許可します。 | 正規化後の参照リンクは束になり、整合性に影響を与えることなくデータの冗長性を最小限に抑えますが、分割することはできず、現在のテーブルにアーカイブするときに最適化できません。 |
束 | テーブル。 そのデータを他のテーブルに含めることはできませんが、それらに基づいて他のテーブルにデータを作成できます。 テーブルには、属性値が分割不可能で一意ではないタプルを含めることはできません。 | プログラムの自動エラーログ。 サーバー要求ログ 結果をトレースします。 コンポーネントのアンロードとロードについて報告します。 自動セキュリティレポート。 | このバンドルは、整合性を損なうことなくデータの冗長性を最小限に抑えます。 | 累積は不可分な表です。 最適化するのは難しいです。 |
表6.分類
2.2。 回路図分類
図4.データの整合性と冗長性の兆候によってリレーショナルデータベースのテーブルを分類するスキーム
3.分類の適用に関するいくつかのコメント
3.1。 分類を使用してテーブルを正規化する
いくつかの手順を考慮しない場合の正規化プロセス(ただし、これらの手順の結果を考慮してください!)通常、テーブルを小さなテーブルに分割して、直接または中間テーブル(多対多の関係)を介して関係を作成します。 関係関係は、必ずしも関係関係を意味するとは限りません!
動的参照または静的参照を静的動的参照に変換し、リンクへのリンクリンクをリンクへの静的動的参照と同様に変換することは、テーブルを分割することです。 つまり、データの冗長性を回避するために、上記の分類を通じて1つのタイプのテーブルを別のタイプに変換します。これが、正規化を定義する方法です(定義の1つ)。
例として。 データを変更する唯一の操作が追加であるデータベースがあるとします。 この場合、エンティティの特定の属性を変更して、残りの属性値を別のタプルに「コピー」するたびに無効になります。 この場合、NULLを使用するか、1つのセマンティクスまたは1つの属性の一連の属性を記述する静的動的参照ブックを作成し、シーケンスの主キーを持つ外部キーのみが複製されます。 データを更新および削除する従来のデータ変更スキームでも、同じ方法を使用できます。
おわりに
この分類は、データベースの設計における観察に基づいて、またリレーショナルDBMSでの設計に関する読み取り理論に基づいて作成されました。 「データベース」の規律を研究し、データベースの設計に関わる友人や知人に、そしてこの分類は「生活」を非常にシンプルにし、多くの状況で最も適切な、そして後で判明したように、それらを格納するための正しいテーブルを事前に選択することを可能にしましたまたは他のデータ。
分類は、その中の既存の種を亜種に分割することによって(おそらく新しい種を追加することによっても)拡張できます。 この分類は、状況によっては、1種類または別の種類のテーブルを使用しないほうがよいことも示しています。 この分類のいくつかのタイプのテーブルは、あまり頻繁に使用されません(動的リファレンスブック)。 また、他のものと交換しようとするものもあります(バンドルへの参照バンドル)。
この分類が、「データベース」の分野をマスターするとき、およびリレーショナルDBMSでデータベースを設計するときに、他の誰にも役立たないことを願っています。