7

リレーショナルデータベースとSQLを教えるための良いシナリオはありますか?私が見つけることができるすべての例は、些細なものであるか、ドメインの制約がありそうもない(フルネームが一意であるなど)ものです。

私は特に、正規化の良い例をいくつか見つけようとしています。3NFとBCNFにすぐには適合しないテーブルです。現在、レベルごとに異なる問題を使用しています。

もちろん、不適切に設計されたデータベースの良い例も気に入っていますが、基本が習得されるまでは少し気が散ります。


おかげで、いくつかの良い例。これまでで最高だと思うので、生徒/クラス1を回答としてマークしましたが、誰かがもっと貢献したい場合は、そうしてください。

4

9 に答える 9

9

学生/クラスはクラシックであると覚えているようです。そこに成績を入れて、もう少し複雑にすることもできます。

  • 学生は多くのクラスに参加できます

  • クラスにはたくさんの生徒がいます

  • 生徒が参加するクラスごとに、成績をつけることができます

最初は、これを1つのテーブルで実行し、3つに非正規化できます。

于 2009-02-02T16:41:16.673 に答える
6

オフトピック

データベースクラスを教えてきたので、クエリの基本をマスターするまではデザインを忘れることをお勧めします。データベースからデータを取得する方法を理解すれば、正規化の必要性をよりよく理解できます。正規化と設計から始めると、クラスの残りの部分でほとんどの生徒を失うことになります。デザインはデータベースコースの最後のモジュールであるはずですが、私がこれまでにレビューしたすべての教科書はそれから始まりました。

クエリを学習するときに、良いデータベース設計と悪いデータベース設計の両方をクエリするようにすると、設計を教えるときに悪い設計がどれほど苦痛であるかを実際に理解できます。

于 2009-02-02T20:03:11.337 に答える
2

eコマース/ショッピングカートのデザインは、ほとんどの人がコンセプトを理解し、さまざまな方向にプッシュできるため、優れています.

cart、cart_items、users、orders、order_items などの簡単なことを実行できます。

次に、user_addresses、user_emails、items、item_details、item_history などを使用してさらに深く掘り下げることができます。

多くの判断が求められるため、これは多くの良い議論を提供できます。

于 2009-02-02T16:46:25.307 に答える
1

「最良の選択」はさまざまな要因に依存するため、別の優れたモデルは請求書アイテム モデルです。

  • 書き込み操作と読み取り操作の数。
  • パフォーマンス;
  • レポート機能は必要ですか?

このデータ モデルを見てください。

請求書

  • ID
  • 日にち

InvoiceItem

  • 請求書ID
  • 説明

アプリケーションの機能は次のとおりです。

  • 新しい請求書を作成します。
  • 毎晩、(a) 各請求書の合計金額、(b) 1 日の合計金額の 2 つのレポートを作成して送信します。

請求書ごとに平均 5 項目、1 日あたり 100 件の請求書があるとします。最終的には、毎日次のようにします。

  • InvoiceItem に対する 5 x 100 の書き込み。
  • 請求書への 100 回の書き込み。
  • 5 x 100 + 100 = Invoice および InvoiceItem からの 600 読み取り (レポート (a));
  • 5 x 100 + 100 = Invoice および InvoiceItem からの 600 読み取り (レポート (b));

したがって、読み取りと書き込みのコストが同じであると仮定すると、合計 = 1800 オペレーション / 日となります。

エンティティ「Invoice」に「TotalAmount」属性を追加すると、状況は少し異なります。

  • InvoiceItem に対する 5 x 100 の書き込み。
  • 請求書への 100 回の書き込み (TotalAmount を含む);
  • 請求書のみから 100 (レポート (a));
  • 請求書のみから 100 (レポート (b));

合計800回の操作で:)

于 2009-02-18T11:17:48.477 に答える
1

これは、私自身の大学時代にさかのぼる例です。これは、データベース設計の課題とオブジェクト指向設計の課題の両方として使用されました。

すべての情報が一度に明らかにされたわけではありません。課題の一部は、新しい要件を処理するために設計を適応させる方法と、適切な正規化によってこれがどのように容易になるかを確認することでした。

大学の状況に合わせてデータベースを設計する必要があり、登録を処理したいとします。

あなたは教えられたコースを持っています。各コースには、タイトルと毎週の定期的な時間枠があります。

各コースには、コースを紹介する講師がいます。

各 Course には、そのコースを学習する多数のStudentがあります。

各コースには、学生の学習を支援する1 人以上のチューターがいます。どのチューターがどの生徒をサポートしているかを追跡する必要はありません。

一部のコースには、複数の定期的な時間枠があります。

複数の講師がいるコースもあります。

講師とチューターには報酬が支払われます。つまり、税務上の目的で一部の情報を追跡する必要があります。税務部門は、彼らが何に対して支払われたかは気にしません。彼らは、私たちが 1 人につき 1 つの記録を持つことを期待しています。

一部のコースでは、講師がチューターとしても機能し、一部の学生が教材をどのように扱っているかを間近で見ることができます。

一部のチューターは、他のコースの講師でもあります。

コースのチューターになるには、以前にそのコースの学生であった必要があります。

すべての学生がコースに合格したことで単位を取得できるわけではありません。一部の学生は、単位を必要とせずにコースを監査しているだけです。

コースに失敗した学生は、後でコースに再度参加することができます。すべての試行の記録を保持する必要があります。

于 2009-03-21T21:19:59.253 に答える
0

ItzikBenGanの新しい本であるMicrosoftSQLServer 2008:T-SQL Fundamentalsには、簡略化されたNorthwindデータベースから派生した非常に基本的な例があります。

Microsoft SQL Server 2008:T-SQLの基礎作成者サポートページ

于 2009-02-02T17:00:47.213 に答える
0

再:

私は特に、正規化の良い例をいくつか見つけようとしています。3NFとBCNFにすぐには適合しないテーブルです。

正規化されたデータベーススキーマのサンプルは、http://www.microsoft.com/sqlserver/2005/en/us/express-starter-schemas.aspxにあります。それらをゼロから構築して、生徒に「正規化の方法」を示すことができます。特に連絡先管理スキーマを見てください。スキーマを簡単に非正規化し、3NF以上に戻すことができます。

于 2009-02-02T16:54:54.680 に答える
0

図書館の例も常にあります(図書館には多くの本があり、各本には著者と出版社があり、正規化すると別々のテーブルにプッシュできます)

于 2009-02-02T16:48:48.000 に答える