SQL
 Computer >> コンピューター >  >> プログラミング >> SQL

リレーショナルデータベース管理システム(RDMS)


リレーショナルデータベース設計(RDD)モデルの情報とデータを、行と列を含む一連のテーブルに変換します。リレーション/テーブルの各行はレコードを表し、各列はデータの属性を表します。構造化照会言語(SQL)は、リレーショナルデータベースを操作するために使用されます。リレーショナルデータベースの設計は4つの段階で構成され、データは関連するテーブルのセットにモデル化されます。ステージは-

  • 関係/属性を定義する
  • 主キーを定義する
  • 関係を定義する
  • 正規化

リレーショナルデータベースは、データの整理とトランザクションの実行へのアプローチが他のデータベースとは異なります。 RDDでは、データはテーブルに編成され、すべてのタイプのデータアクセスは制御されたトランザクションを介して実行されます。リレーショナルデータベース設計は、データベース設計に必要なACID(原子性、一貫性、整合性、および耐久性)プロパティを満たします。リレーショナルデータベースの設計では、データ管理の問題に対処するためのアプリケーションでデータベースサーバーを使用することが義務付けられています。

リレーショナルデータベース管理システム(RDMS)

リレーショナルデータベースの設計プロセス

多くの決定を下さなければならないため、データベース設計は科学よりも芸術です。データベースは通常、特定のアプリケーションに合わせてカスタマイズされます。 2つのカスタマイズされたアプリケーションが同じであるということはありません。したがって、2つのデータベースが同じであるということはありません。これらの設計上の決定を行う際には、ガイドライン(通常は何をすべきかではなく何をすべきでないかという観点から)が提供されますが、最終的には設計者が選択を決定します。

ステップ1-データベースの目的を定義する(要件分析)

  • 要件を収集し、データベースの目的を定義します。
  • サンプルの入力フォーム、クエリ、レポートを作成すると、多くの場合役立ちます。

ステップ2-データを収集し、テーブルに整理し、主キーを指定します

  • データベースの目的が決まったら、データベースに保存する必要のあるデータを収集します。データをサブジェクトベースのテーブルに分割します。
  • 各行を一意に識別する、いわゆる主キーとして1つの列(またはいくつかの列)を選択します。

ステップ3-テーブル間の関係を作成する

独立したテーブルと無関係なテーブルで構成されるデータベースはほとんど目的を果たしません(代わりにスプレッドシートの使用を検討してください)。リレーショナルデータベースの力は、テーブル間で定義できる関係にあります。リレーショナルデータベースを設計する上で最も重要な側面は、テーブル間の関係を特定することです。関係の種類は次のとおりです。

  • 1対多
  • 多対多
  • 1対1
1対多

「クラス名簿」データベースでは、教師は0個以上のクラスを教えることができますが、クラスは1人の(そして1人だけの)教師によって教えられます。 「会社」データベースでは、マネージャーは0人以上の従業員を管理し、従業員は1人の(そして1人の)マネージャーによって管理されます。 「製品販売」データベースでは、顧客は多くの注文を行う可能性があります。 1人の特定の顧客が注文している間。この種の関係は1対多として知られています。

1対多の関係を単一のテーブルで表すことはできません。たとえば、「クラス名簿」データベースでは、教師に関する情報(名前、オフィス、電話番号、電子メールなど)を格納するTeachersというテーブルから始めることができます。各教師が教えたクラスを保存するために、列class1、class2、class3を作成できますが、作成する列の数がすぐに問題になります。一方、クラスに関する情報を格納するClassesというテーブルから始める場合は、(1人の)教師に関する情報(名前、オフィス、電話番号、電子メールなど)を格納する追加の列を作成できます。ただし、教師は多くのクラスを教える可能性があるため、そのデータはテーブルクラスの多くの行に複製されます。

1対多の関係をサポートするには、2つのテーブルを設計する必要があります。 classIDを主キーとするクラスに関する情報を格納するテーブルClasses。そして、主キーとしてteacherIDを持つ教師に関する情報を格納するテーブルTeachers。次に、テーブルTeacherの主キー(つまり、teacherID)( "one"-endまたは親テーブル)をテーブルクラス("many"-endまたは子テーブル)、以下に示すように。

リレーショナルデータベース管理システム(RDMS) 子テーブルClassesの列teacherIDは外部キーと呼ばれます。子テーブルの外部キーは、親テーブルの主キーであり、親テーブルを参照するために使用されます。

多対多

「製品販売」データベースでは、顧客の注文に1つ以上の製品が含まれている場合があります。また、製品は多くの注文で表示される可能性があります。 「書店」データベースでは、本は1人以上の著者によって書かれています。一方、著者は0冊以上の本を書くことができます。この種の関係は多対多として知られています。

「製品販売」データベースで説明しましょう。まず、ProductsとOrdersの2つのテーブルから始めます。テーブルproductsには、productIDを主キーとする製品に関する情報(名前、説明、quantityInStockなど)が含まれています。テーブルordersには、顧客の注文(customerID、dateOrdered、dateRequired、およびstatus)が含まれています。繰り返しになりますが、アイテム用に予約する列の数がわからないため、Ordersテーブル内に注文されたアイテムを保存することはできません。また、注文情報をProductsテーブルに保存することもできません。

多対多の関係をサポートするには、3番目のテーブル(ジャンクションテーブルと呼ばれる)、たとえばOrderDetails(またはOrderLines)を作成する必要があります。ここで、各行は特定の注文のアイテムを表します。 OrderDetailsテーブルの場合、主キーは、各行を一意に識別するorderIDとproductIDの2つの列で構成されます。 OrderDetailsテーブルの列orderIDとproductIDは、OrdersテーブルとProductsテーブルを参照するために使用されるため、OrderDetailsテーブルの外部キーでもあります。

リレーショナルデータベース管理システム(RDMS)

実際、多対多の関係は、ジャンクションテーブルの導入により、2つの1対多の関係として実装されています。

Orderには、OrderDetailsに多くのアイテムがあります。 OrderDetailsアイテムは、1つの特定の注文に属しています。

商品は多くのOrderDetailsに表示される場合があります。 OrderDetailsの各アイテムで1つの商品が指定されました。

1対1

「製品販売」データベースでは、製品に画像、詳細説明、コメントなどのオプションの補足情報が含まれている場合があります。それらをProductsテーブル内に保持すると、多くの空のスペースが生じます(これらのオプションのデータがないレコードでは)。さらに、これらの大きなデータはデータベースのパフォーマンスを低下させる可能性があります。

代わりに、別のテーブル(ProductDetails、ProductLines、ProductExtrasなど)を作成して、オプションのデータを保存できます。レコードは、オプションのデータを含む製品に対してのみ作成されます。 ProductsとProductDetailsの2つのテーブルは、1対1の関係を示しています。つまり、親テーブルのすべての行に対して、子テーブルには最大で1つの行(場合によってはゼロ)があります。同じ列productIDを両方のテーブルの主キーとして使用する必要があります。

一部のデータベースでは、テーブル内に作成できる列の数が制限されています。 1対1の関係を使用して、データを2つのテーブルに分割できます。 1対1の関係は、特定の機密データを安全なテーブルに保存し、非機密データをメインテーブルに保存する場合にも役立ちます。

リレーショナルデータベース管理システム(RDMS)

列のデータ型

列ごとに適切なデータ型を選択する必要があります。通常、データ型には、整数、浮動小数点数、文字列(またはテキスト)、日付/時刻、バイナリ、コレクション(列挙やセットなど)が含まれます。

ステップ4-デザインの改良と正規化

たとえば、

  • 列を追加する
  • 1対1の関係を使用して、オプションのデータ用の新しいテーブルを作成します。
  • 大きなテーブルを2つの小さなテーブルに分割します
  • その他の方法。
正規化

いわゆる正規化ルールを適用して、データベースが構造的に正しく最適であるかどうかを確認します。

第一正規形(1NF): すべてのセルに値のリストではなく単一の値が含まれている場合、テーブルは1NFです。このプロパティはアトミックとして知られています。 1NFは、item1、item2、itemNなどの列の繰り返しグループも禁止しています。代わりに、1対多の関係を使用して別のテーブルを作成する必要があります。

第2正規形(2NF)- テーブルが1NFであり、すべての非キー列が主キーに完全に依存している場合、テーブルは2NFです。さらに、主キーが複数の列で構成されている場合、キー以外のすべての列は、セットの一部ではなく、セット全体に依存する必要があります。

たとえば、orderIDとproductIDで構成されるOrderDetailsテーブルの主キー。 unitPriceがproductIDのみに依存している場合、それはOrderDetailsテーブルには保持されません(Productsテーブルには保持されません)。一方、単価が特定の注文だけでなく製品にも依存する場合は、OrderDetailsテーブルに保持する必要があります。

第3正規形(3NF)- テーブルが2NFであり、非キー列が互いに独立している場合、テーブルは3NFです。つまり、非キー列は主キーに依存し、主キーのみに依存し、他には何も依存しません。たとえば、列productID(主キー)、name、およびunitPriceを持つProductsテーブルがあるとします。列discountRateは、主キーの一部ではないunitPriceにも依存している場合、Productsテーブルに属さないものとします。

より高い正規形: 3NFには不十分な点があり、ボイス/コッド正規形、第4正規形(4NF)、第5正規形(5NF)など、より高い正規形になります。これは、このチュートリアルの範囲を超えています。

パフォーマンス上の理由から、正規化ルールの一部を破ることができる場合があります(たとえば、orderDetailsレコードから取得できるtotalPriceという列をOrdersテーブルに作成します)。またはエンドユーザーがそれを要求したため。それを十分に認識し、それを処理するためのプログラミングロジックを開発し、決定を適切に文書化するようにしてください。

整合性ルール

また、整合性ルールを適用して、デザインの整合性をチェックする必要があります-

1.エンティティ整合性ルール- 主キーにNULLを含めることはできません。そうしないと、行を一意に識別できません。複数の列で構成される複合キーの場合、どの列にもNULLを含めることはできません。ほとんどのRDBMSは、このルールをチェックして適用します。

2。参照整合性ルール- 各外部キー値は、参照されるテーブル(または親テーブル)の主キー値と一致する必要があります。

値が親テーブルに存在する場合にのみ、外部キーを含む行を子テーブルに挿入できます。

親テーブルでキーの値が変更された場合(たとえば、行が更新または削除された場合)、子テーブルでこの外部キーを持つすべての行を適切に処理する必要があります。 (a)変更を禁止することができます。 (b)それに応じて子テーブルの変更をカスケード(またはレコードを削除)します。 (c)子テーブルのキー値をNULLに設定します。

ほとんどのRDBMSは、指定された方法でチェックを実行し、参照整合性を保証するように設定できます。

3。ビジネスロジックの整合性- 上記の2つの一般的な整合性ルールに加えて、ビジネスロジックに関連する整合性(検証)が存在する可能性があります。たとえば、郵便番号は特定の範囲内で5桁であり、配達日時は営業時間内になります。注文数量は在庫数量以下である必要があります。これらは、無効化ルール(特定の列に対して)またはプログラミングロジックで実行できます。

列のインデックス作成

選択した列にインデックスを作成して、データの検索と取得を容易にすることができます。インデックスは、SELECTのデータアクセスを高速化する構造化ファイルですが、INSERT、UPDATE、およびDELETEの速度を低下させる可能性があります。インデックス構造がない場合、一致基準(SELECT * FROM Customers WHERE name ='Tan Ah Teck'など)を使用してSELECTクエリを処理するには、データベースエンジンがテーブル内のすべてのレコードを比較する必要があります。特殊なインデックス(BTREE構造など)は、すべてのレコードを比較せずにレコードに到達できます。ただし、レコードが変更されるたびにインデックスを再構築する必要があるため、インデックスの使用に関連するオーバーヘッドが発生します。

インデックスは、単一の列、列のセット(連結インデックスと呼ばれる)、または列の一部(たとえば、VARCHAR(100)の最初の10文字)(​​部分インデックスと呼ばれる)で定義できます。 。 1つのテーブルに複数のインデックスを作成できます。たとえば、customerNameまたは電話番号のいずれかを使用して顧客を頻繁に検索する場合は、phoneNumber列だけでなくcustomerName列にもインデックスを作成することで検索を高速化できます。ほとんどのRDBMSは、主キーにインデックスを自動的に作成します。


  1. Excel でリレーショナル データベースを作成する方法 (簡単な手順)

    リレーショナル データベース 多くの異なるデータ テーブルに格納されている情報間の関係を識別します。 Excel での操作が容易になります。 複数のワークシートで多数のデータセットを操作する必要があるときはいつでも。リレーショナル データベースは、特定の情報をすばやく検索して引き出すのに役立ちます。同じデータ値をいくつかの方法で表示できます。この記事では、作成するための段階的な手順を紹介します。 a リレーショナル データベース エクセルで . 次のワークブックをダウンロードして、自分で練習してください。 Excel でリレーショナル データベースを作成する手順 ここでは、最初に 2

  2. 健全なデータベース管理システムが必要な理由

    家や部屋の掃除を何週間も避けた後、最終的に掃除しようと決心したとき、完全に場違いなものがたくさんあることに気づきます。そこで、誰もが思い通りの場所に物を置きやすい仕組みを作ろうと考えています。さまざまなカテゴリを定義し、家庭用品をそれぞれのカテゴリの下にさまざまな名前で分類します。それでも、計画と実行は 2 つの異なるものであるため、カテゴリに矛盾が生じる場合があります。 同様に、組織は、一般に企業データベースとして知られる貴重なデータを管理するための措置を講じることができます。したがって、データベース管理システムと呼ばれるシステムを介して、複数のデータベースを作成および管理できます。ユーザー