sql >> データベース >  >> RDS >> Mysql

MySQL-データベースコンテンツの整理(スポーツリーグ)

    痛い。あなたは大きな仕事を引き受けました。あなたがやろうとしていることは、すでに利用可能な何かによってはできないと絶対に確信していますか?確かに、読み進めてください。

    まず、やりたいことの最も難しい部分は、ユーザーアクセスの管理です。先に進む前に、ユーザー管理モジュールを作成することから始めることをお勧めします。

    あなたが望むものについては、Drupalまたは他のシニアCMSシステムの1つがシステムをブートストラップするための素晴らしい方法である可能性が高いようです。 Drupalは、箱から出してすぐに(または最小限の問題で)ユーザー管理を処理し、残りのコードを静的ノードとして記述できます。これにより、ブログ、フォーラム、ニュースの追加、メーリングリストの管理なども簡単になります。

    上記のコメントで述べたように、データをまとめておく必要があります。履歴比較のためにもデータを保持しておくとよいでしょう。

    CMSを拡張しない場合は、精神科医から戻った後、次のようなものが必要になります。

    1. dbにアクセスし、ユーザー認証を確認するためのヘッダーファイル。

    2. データを表示するためのフッターファイル

    3. データを表示または取得するための個々のページファイル。

    ユーザーを処理するためのデータベース構造(少なくとも)はIROである必要があります:

    Person - details of individual users
    username - link person to a username
    email - email addresses
    club - sports club details
    password - passwords
    logon - record of logon attempts
    role - record of role of individuals in your site
    permissions - list of required permissions to access areas of the site
    role_permissions - default permissions for each role
    person_role - link person to role
    person_permissions - link person to permissions (only needed if some individuals need extra permissions not given routinely by their role)
    club_person; person_email; - link people to clubs and to their email addresses.
    

    一致を処理するには、次のものが必要です。

    team - team name, group and club reference
    grouping - list of groups eg by age.  
    divisions. - list of divisions
    venue - list of venues.  Include GPS!!!
    match - division, grouping, team1, team2, venue, date, time
    result - team1 reported result, team 2 reported result, approved result (you may need to intervene!) match.
    

    ご覧のとおり、かなりの数のテーブルが必要ですが、ユーザーアクセスが適切に機能するまで、実際のチームで楽しいことをしようとしてはいけません。

    私があなたのためにスケッチしたのは、通常の形式のデータベースです。テキストデータが重複することはなく、データの取得、インデックス作成、表示が簡単です。データベースを設計することは少し範囲外であるため、この質問はSOには広すぎると思いますが、一般的な形式は有用だと思います。

    各テーブルには、必要な一意のデータのみを含める必要があります。例:

    Person:  personid int, surname, forename, style, whenadded, whoadded, inuse
    email:   emailid, email, whenadded, whoadded, inuse
    email_person:  emailpersonid,emailid,personid, whenadded,whoadded,inuse
    

    これにより、複数の人が1つの電子メールを共有し、複数の電子メールを1人の人にテキストの重複なしで適用できます。 IDは、SERIALではなくINT AUTO_INCREMENT PRIMARY KEYと入力する必要があります。これにより、ストレージスペースが大幅に節約され、このアプリケーションでINTを入力することはありません。

    他のテーブルも同じ方法で作成する必要があります。 whoadded列とwhenadded列はオプションであり、ストレージを大量に消費しますが、非常に便利です。 inuseは必須です。これをBOOLに設定すると、チームを削除せずに削除できます。データは失われません。 whenremovedとwhoremovedは監査にも役立ちます。

    パスワードについて一言-これらをソルトハッシュとして保存してください。これを行うと、サイトがハッキングされたときに、インターネットバンキングにも使用されているパスワードが公開されることはありません。人々はしばしば馬鹿です。あなたはそれらの世話をしなければなりません。

    私が言ったように、少し範囲外なので、そこで答えを終了します-要求に応じて、堅牢で拡張可能な第4正規形Dbの基本的な概要を示しますが、作業はあなたに任せます。問題が難しすぎることが判明した場合は、さらに質問してみませんか。

    頑張ってください。

    追加:

    DIYフレームワーク:

    既存のフレームワークまたはCMSのいずれかを使用する方法を学びたくない場合は、独自のフレームワークを作成する必要があります。奇妙なことに、これは実際には非常に簡単です。

    header.php:

    <?PHP
    $mysqli=new mysqli(credentials....)//connect to database and present a mysqli or pdo object.
    session_start(); //open a session
    //you will need to authenticate your session here - see below
    ?>
    

    footer.php:

    <HTML>
    <HEAD>
    <TITLE>
    <?PHP echo $pagetitle;?>
    </TITLE>
    </HEAD>
    <BODY>
    <?PHP echo $content;?>
    </BODY>
    </HTML>
    

    これらはmypage.phpによって使用されます:

    <?PHP
    require("header.php");
    //do some stuff that generates $content
    $pagetitle="mypage.php";
    require("footer.php:);
    ?>
    

    これはあなたが必要とする最低限のものであり、本当に厄介であることを強調する必要があります-これは、理想的なコードの例ではなく、これをどのように開始するかを示すために提示されています。それでも動作します。

    重要なのは、データベース接続、ユーザー名、ユーザーログオンステータスなどの必要な変数を示すヘッダーと、データを表示するために詳細を入力できるフッターを作成することです。フッターは、HTMLとPHPを組み合わせる唯一の場所です。

    $ _SESSIONを使用して、ページ間で保持する必要のある情報を保存します。

    これらのファイルは、好きなだけ単純または複雑にすることができます。私は、ユーザーとセッションに対していくつかのチェックを行い、フッターにスクリプトやカスタムCSSファイルなどを表示できる独自の時代を作成しました。シンプルに始めて、必要に応じて構築すれば、それは難しいことではありません。 SOがお手伝いします。

    注意の一言:あなたは非常に簡単に始めることができますが、あなたがしようとしていることは足があり、手に負えなくなるでしょう。コードを起動して実行した後、コードを監査して、誤ってセキュリティ上の欠陥が含まれていないことを確認してください。プロジェクトに参加して迅速な修正が必要な場合は、これらを含めるのは非常に簡単であり、探しているのでない限り、後で見つけるのは非常に困難です。



    1. ワイルドカードとして扱われずにLIKEでパーセント(%)を使用するにはどうすればよいですか?

    2. PostgreSQL、SQL状態:42601

    3. Woocommerceは製品ごとの総小売売上高をエコーし​​ます

    4. SQLのトリガーとは何ですか?それらを実装する方法は?