新入生のデータモデリングとデータベース

イノポリス大学の新入生として、彼らは私たちがここで何をしているのかという質問よく聞きます。 特にHabrについては、DMDプロジェクトをどのように「見た」かについての物語を書きました。







注意! 著者は、彼のジョークが理解可能で面白いことを保証しません。



大学には、データモデリングとデータベース(DMD)という絶対にすべての人に教えられるような基本的な(コア)コースがあります。 名前が示すように、このコースではデータベースについて学習します。それが何であるか、何のためであるか、どのように使用するか、他に何が起こるかです。



私たちは主にPostgreSQL DBMSで作業しています。つまり、リレーショナルデータベースで作業しています。 私にとって、データベースは情報の「リポジトリ」なので、初心者にとってこのトピックは非常に興味深いものです。 さて、情報を所有する人は誰でも、世界を所有しています。 このコースの教員は次のようになります。

  1. 主任講師-Qiang Qu (中国)、
  2. 二次インストラクター-Sadegh Nobari (イラン)、
  3. アシスタントインストラクター-Jooyoung Lee (韓国)およびWaqas Nawaz (パキスタン)、
  4. ティーチングアシスタント-Marat Valiev(ロシア)。


講義のほとんどはQiang Quによって行われますが、時には講義が2つの部分に分割され、Sadegh Nobariが参加します。 新入生は、Marat Valievが実施するセミナーを開催しています。 また、講義は英語で行われることも注目に値します(教師がわずかに強調されているにもかかわらず、すべてが簡単かつ明確に認識されます)。



晴れた9月のある日、インストラクターは私たちに良い知らせを伝えました。「みんな、私たちのコースでは、出版物(記事)を管理するシステムを開発すべきです。 これがプロジェクトとなり、対象の最終結果の15%と見積もられます。 プロジェクト全体は5つの部分に分かれています。

  1. 既存のDBMSを使用してリレーショナルモデルを開発および実装します。
  2. フェーズ1で作成されたデータベースと対話するためのWebインターフェイスを開発します。
  3. 独自のDBMSを開発し、それを最初のフェーズで使用したものに関連付けます
  4. 占有メモリ、CPU負荷、ディスクI / Oをリアルタイムで表示するWebアプリケーションを開発します。
  5. 独創的なアイデア


プロジェクトの作業を開始するには、グループのチームとプロジェクトを共有する必要があります。 要件:チーム内の3人以下。 その結果、1人が真剣なチームであることが判明しました。



ですから、私は一緒に仕事をすることができて幸運でした。 それは必要であり、必要です(私はコースを圧倒したくはありませんし、それでもおもしろいです)。 新入生には、2つのフェーズのみを完了するというタスクが与えられました。



最初のフェーズでは、将来のデータベースのERモデルとリレーショナルモデルを作成し、テーブルを正規化し、科学記事のあるサイトを見つけ、これらの記事のデータをデータベース(少なくとも100万記事)に送り出し、これらの記事をランク付けするSQLクエリを作成し、関連記事を見つけるためのクエリ。 行こう!



まず、ベースのERモデルを作成しました(3〜4回の改造の後に、すぐに良いモデルが出てきたと言います)。 次に、これらすべてをリレーショナルモデルに変換し、BCNFに従って正規化しました。 すべてがうまくいきました。 PHPでパーサーを作成するための長くて苦しい試みの後、グーグルを開始することが決定されました。 その結果、サイトから記事に関する情報をダウンロードし、すべてをXMLファイルに変換するpythonグラバーが見つかりました。 その結果、1,000個の記事エントリを含む1,074個のXMLファイルを受け取りました。 すべてが取り出されたサイトはarxiv.orgです。 次に、これらすべてのファイルをデータベースに解析する必要があります。 JavaのDOMパーサーを使用してXMLファイルを処理しました。ここでデータベースに接続し、PostgreSQLから提供されたJDBCドライバーを使用してデータを送信しました。 出力では、1,074,000レコードのベースを取得しました。 わあ! ハーフフェーズが完了しました。 要求の時が来ましたが、それらについては後で書かれます。



2段階のときがきました 。 チームはバックエンドとフロントエンドに分割されました。 前面には、HTML、CSS、およびJavaScriptが使用されました。 最初のステップは、登録フォームを作成し、データベースをそれに接続して新しいユーザーを作成し、すでに登録されているユーザーが入力したデータの正確性を検証することでした。 電子メールニュースレターはありません。登録が成功したことを知らせるポップアップウィンドウのみです。 登録フォームでは、データベースへの接続にJavaScriptとPHPの既製のテンプレートを使用しました。 次に、サイトのメインページを作成しました。 最初は5ページが想定されていましたが、その結果、ホーム、追加(新しい記事を追加する)、検索(データベース内の記事を検索する)の3ページが作成されました。 最後の2ページでは、シンプルな検索とフォームの追加を使用しました。 メインページには、1996年から2015年までの記事数と6つの主要カテゴリの記事数を示す2つの図があります。 このため、必要なデータのデータベースから選択するために、既製のJavaScriptおよびPHPテンプレートが使用されました。 この時点で、フロントエンドはアクティビティを完了し、自分自身をバックの手に移します。



背中は4つの段階に分かれています。 最初の段階では、検索用のクエリが作成されました。 検索は、キーワード、カテゴリ、発行日、または上記の方法のさまざまな組み合わせによって実行されます。 キーワード検索は、名前、概要、カテゴリによる検索です。 結果は関連性によって発行されます-最初は名前の一致、最後はカテゴリです。 クイック検索のために、全文検索とtsvectorタイプのGINインデックスが実装されました。 GINが選択されたのは、迅速かつ効率的なデータベース検索を実行するためです。



第二段階では、ソート方法が作成されました。 デフォルトでは、関連性によるソートが設定されています(レーベンシュタインアルゴリズムを使用)。 日付によるソートも可能です(ユーザーはこのタイプを選択できます)。 第3段階-記事の追加リクエスト。 単純なINSERTを使用して実装されます。 すべてが単純なように見えますが、1つのことを予見する必要がありました-SQLインジェクションに対する保護。 このため、PHP関数pg_escape_stringが入力データに使用されました。 登録フォームの作成時に同じメソッドが実装されました。



最後のステップは記事の更新と削除です。 繰り返しますが、標準のSQLクエリが使用され、インジェクション保護が提供されました。



この2つのフェーズで、まあ、プロジェクトが完了しました。
以下に、新入生の仕事のいくつかの例を見ることができます












これで、プロジェクトを作成した最初の経験の話は終わりました。 私は多くの人の好奇心を満足させ、将来、私たちは突然、より楽しく、より野心的なプロジェクトを持つことを望んでいます。



良い日/夜と勉強/仕事の成功! 大学に入学し、次の学年度の助成金の競争は既にapply.innopolis.ruで開かれています



マルセル・グスマノフ、学部1年生



イノポリス大学キャンパスの冬の写真
大学







スポーツ複合施設








All Articles