11

ウェブサイト用のデータベースの作成を始めたばかりなので、読み直しDatabase Systems - Design, Implementation and Management (9th Edition)ていますが、よく整理され正規化されたデータベースを作成するための手順が本に記載されていないことに気付きました。この本はあちこちに散らばっているように見えます.正規化プロセスはすべて1か所にありますが、それに至るまでの手順はそうではありません.

すべての手順を 1 つのリストにまとめておくと非常に便利だと思いましたが、そのようなものはオンラインでも他の場所でも見つかりません。すべての手順を説明する回答者は非常に広範なものになると思いますが、この件に関して私が得ることができるものは何でも大歓迎です。正規化前の指示の順序と提案へのリンクを含みます。

私はプロセスにある程度精通していますが、データベースの設計から長い休憩 (約 1 年) を取ったので、すべてを詳細に説明したいと思います。

私は特に興味があります:

  • データベースのモデリングを開始するための適切なアプローチは何ですか (または、混乱しないようにビジネス ルールをリストする方法)

ER または EER (拡張エンティティ関係モデル) を使用したいのですが、知りたいです

  • EER(分離と重複)を使用してサブタイプとスーパータイプを正しくモデル化する方法(また、ビジネスルールを書き留めて、それを行う一般的な方法がある場合はサブタイプであることがわかります)

(私はすでに正規化プロセスに精通していますが、回答にはそれに関するヒントも含まれている可能性があります)

次の点についてまだサポートが必要です。

  • ビジネス ルールを書き留める (EER のサブタイプとスーパー タイプのビジネス ルールを含む)
  • EER でサブタイプとスーパータイプを正しく使用する方法 (それらをモデル化する方法)

他の提案をいただければ幸いです。

4

4 に答える 4

2

E / Rモデリングに関するこのビデオ(約9)をお勧めします

http://www.youtube.com/watch?v=q1GaaGHHAqM

編集:

「このモデルの図はどれくらい広範である必要がありますか?すべてのエンティティと属性を含める必要がありますか??」

はい、実際にはERモデリングがあり、ERモデリングを拡張しています。

エンティティを指定するだけでなく、PKとFK、およびカーディナリティも指定するため、拡張ERモデリングを作成するという考え方です。このリンクを見てください(グラフィックと両方のモデルの違いを参照してください)。

モデリングには2つの方法があります。1つは実際のシナリオであり、もう1つはDB、IEの実際の構造です。

E-ERモデリングを作成すると、すべてのエンティティのリレーションシップとカーディナリティも作成されますが、カーディナリティ1:Nのリレーションシップを作成するためにDBを作成する必要はありません(カーディナリティNのテーブルはテーブルからFKを作成しますcard。1を使用し、DBにリレーションテーブルを作成する必要はありません)または1:1のカーディナリティーがある場合、エンティティの1つが他のエンティティを吸収できることがわかります。

このグラフィックを見てください。N:Mリレーションエンティティのみが作成されました(2つ以上のFKが表示されている場合、それはリレーションテーブルです)

ただし、これらは単なる「ルール」であり、パフォーマンスやセキュリティなどの目的で、設計に必要な場合はそれを破ることができることを忘れないでください。

ツールについてはたくさんありますが、ワークベンチをお勧めします。これを使用してDBに接続し(mysqlを使用している場合)、属性を使用してデザインE / Rモデリングを作成でき、彼が自動作成します。関係テーブルN:M。

編集2:

ここに、もう少し良いことを説明できるリンクをいくつか載せました。多くの行が必要で、ここで説明するのが難しくなります。私自身、このリンクを確認して、質問がある場合はお知らせください。

タイプとサブタイプ:

ビジネスルール(整合性の制約)

于 2012-05-25T18:27:15.027 に答える
2

私は本といくつかの記事をオンラインで読み直し、適切なデータベースを設計するためのステップの短いリストを作成しました (もちろん、最初にデータベース設計の基本を理解する必要があります)。ステップについては、以下で詳しく説明します。

(本には多くの手順が記載されています:Database Systems - Design, Implementation and Management (9th Edition)ページ番号もそれを参照していますが、ここでできる限り説明し、この回答を編集してより完全なものにします)

  1. 組織の業務内容の詳細な説明を作成します。
  2. オペレーションの記述から、ビジネス ルールを特定します。
  3. ビジネス ルールから主要なエンティティと関係を特定します。
  4. エンティティ/関係を EER モデルに変換する
  5. 命名規則を確認する
  6. ERR モデルを論理モデルにマップする (pg 400)*
  7. 論理モデルの正規化 (pg 179)
  8. DB 設計の改善 (pg 187)
  9. 論理モデルの整合性制約の検証 (pg 402) (長さなど)
  10. ユーザー要件に対して論理モデルを検証する
  11. テーブルを mySQL コードに変換します (ワークベンチでエクスポート関数を使用して EER を SQL ファイルに変換し、次に mySQL に変換します)。

*ワークベンチとそこで設計した ER モデルの作業を使用している場合は、この手順を省略できます。


1.
事業会社を詳しく説明してください。個人的なプロジェクトを作成している場合は、それを詳細に説明します。会社と協力している場合は、会社を説明する文書を要求し、従業員に情報をインタビューします (インタビューでは一貫性のない情報が生成される可能性があります。設計にとってどの情報がより重要であるかを監督者に確認してください)。 )
2.
収集した情報を見て、そこからルールを生成し始めます。自分の知識に不足している情報を必ず埋めてください。先に進む前に、社内の監督者に確認してください。
3.
ビジネス ルールから主要なエンティティと関係を特定します。設計プロセス中、データベース設計者は、エンティティ、属性、および関係の定義を支援するためにインタビューだけに依存するわけではないことに注意してください。組織が日常業務で使用する帳票やレポートを調べると、驚くほど多くの情報が収集されます。(123ページ)


4.
データベースが複雑な場合は、ERD 設計を次のサブステップに分割できます
i) 外部モデルを作成する (46 ページ)
ii) 外部モデルを組み合わせて概念モデルを形成する (48 ページ)

Follow the following recursive steps for the design (or for each substep) 
    I.   Develop the initial ERD.
    II.  Identify the attributes and primary keys that adequately describe the entities.
    III. Revise and review the ERD.
    IV.  Repeat steps until satisfactory output

You may also use entity clustering to further simplify your design process.

ERD によるデータベースの記述: 実線を使用して弱いエンティティを接続します (弱いエンティティとは、親エンティティなしでは存在できず、PK に親 PK を含むものです)。破線を使用して強力なエンティティを接続します (強力なエンティティとは、他のエンティティから独立して存在できるエンティティです)


5.
名前が命名規則に従っているかどうかを確認します。私は以前ここで命名規則の提案をしていましたが、人々はあまり好きではありませんでした。独自の基準に従うか、オンラインで命名規則を調べることをお勧めします。非常に便利な命名規則を見つけた場合は、コメントを投稿してください。

6. 論理設計には、通常、ER モデルを一連の関係 (テーブル)、列、および制約定義に変換することが含まれます。

次の手順を使用して、ER を論理モデルに変換します。

  1. 強力なエンティティのマッピング (他のエンティティの存在を必要としないエンティティ)
  2. スーパータイプ/サブタイプの関係をマッピングする
  3. 弱いエンティティのマッピング
  4. 二項関係をマッピングする
  5. より高度な関係をマッピングする

7.論理モデルを正規化します。必要な特性を得るために、論理モデルを非正規化することもできます。(パフォーマンスの向上など)

8.

  1. 属性の原子性を改善する - 一般的に、原子性の要件に注意を払うことをお勧めします。アトミック属性は、これ以上細分化できない属性です。このような属性は原子性を示すと言われています。原子性の程度を向上させることで、クエリの柔軟性も得られます。

  2. データの粒度に必要な主キーの絞り込み - 粒度とは、テーブルの行に格納された値によって表される詳細レベルを指します。前述のように、最小レベルの粒度で格納されたデータはアトミック データと呼ばれます。たとえば、ASSIGN_HOURS 属性が、特定のプロジェクトで特定の従業員が働いた時間を表すとします。しかし、それらの値は最小レベルの粒度で記録されていますか? つまり、ASSIGN_HOURS は、時間合計、日合計、週合計、月合計、または年合計を表しますか? 明らかに、ASSIGN_HOURS にはより注意深い定義が必要です。この場合、関連する質問は次のようになります: ASSIGN_HOURS データを記録するのは、どの時間枠 (時間、日、週、月など) ですか? 例えば、EMP_NUM と PROJ_NUM の組み合わせが、ASSIGNMENT テーブルで受け入れ可能な (複合) 主キーであると仮定します。この主キーは、従業員がプロジェクトの開始以降に作業した合計時間数のみを表すのに役立ちます。ASSIGN_NUM などの代理主キーを使用すると、粒度が低くなり、柔軟性が向上します。たとえば、EMP_NUM と PROJ_NUM の組み合わせが主キーとして使用され、従業員が ASSIGNMENT テーブルに 2 つの「勤務時間」エントリを作成するとします。そのアクションは、エンティティの完全性要件に違反しています。複合 PK の一部として ASSIGN_DATE を追加しても、従業員が同じ日に同じプロジェクトに対して 2 つ以上のエントリを作成すると、エンティティの整合性違反が生成されます。

  3. 次の質問に答えてみてください。等。

以下のコメントに提案やより良い説明へのリンクを自由に残してください。回答に追加します

于 2012-06-14T17:01:19.653 に答える
0

あなたの質問の 1 つの側面は、SQL テーブルでサブクラスとスーパークラスの関係を表すことに触れました。Martin Fowler は、これを設計する 3 つの方法について説明しています。その中で私のお気に入りはClass Table Inheritanceです。注意が必要なのは、 Id フィールドがスーパークラスからサブクラスに伝播するように調整することです。これが完了すると、一般的に実行したい結合は、スムーズで簡単、かつ高速になります。

于 2012-07-28T15:36:00.063 に答える
0

データベースの設計には、次の 6 つの主要なステップがあります。

于 2014-12-09T22:24:21.473 に答える