2011-12-19 2 views
1

私はページに複雑なデータベース構造を作るのが初めてです。私はいくつかのカテゴリを持つ基本的な人のテーブルを持っています。学生、教師、親、改造者。両親、学生、教師/改造者のテーブルがあります。それは基本的に学校のウェブサイトです。ページ内でデータベース呼び出しを構造化する方法は?

たとえば、生徒の情報が保護者に公開されているプロフィールページ。教師、科目、出席、宿題などの情報は、テーブルの多くを照会します。だから私の最善の賭けは何ですか?私はWebアプリの方法でそれを行う予定です。私はおそらく私はJSONのデータをAJAXでページすることができ、JavaScriptが計算の重い持ち上げをすることができると考えていた。すべてのテーブルは一度しか照会されません。

だからそうでもいいですか?または私は足を掘ったときにいくつかの隠された問題に直面するだろうか?たぶん私はもう少し深く行くことができ、データベース全体がユーザーに送信され、それがブラウザにキャッシュされている巨大なJSONを作ることができます。私は本当に古いブラウザをサポートする必要はありません:)

出席とマーク/結果のようなものは毎回計算する必要があります。生徒ごとに結果をキャッシュする方法はありますか?親は生徒の結果を見て、それを一度計算して何らかの形でサーバー上でx日間キャッシュします。

EDIT:

私は考えることができる別の非JSONのアプローチは、伝統的な方法です。私はPHPでサーバー側ですべてのことを行う。これは私がブラウザの互換性について心配する必要はないことを意味します。たぶん私は必要なすべてのテーブルを最初に呼び出して、それを配列に格納することができます。そうすればテーブルも一度しか呼び出されません。私は戦場3 battlelogのウェブサイトについてのどこかで読ん

EDIT 2

。それは同じように作られています。すべてのデータはJSONでサーバーから取得され、クライアント側で計算されます。それが私のアイデアを視点に置くのに役立ちます。

+0

常に隠された問題があります。あなたがこれを行うことができる方法は常に複数あります。まず何かを学ぶ。私はプレーンなPHPとmysqlから始めることをお勧めします。もしあなたが本当にJSONを好きにしたいのであれば、couchdbとjavascriptだけでやってください。 – hakre

+0

@hakre JASONについて考えていたのは、javascriptがとても快適だからです。しかし、残念ながら私はmysql以外のものでは動作しないと思うのは、それが私が知っているデータベースであり、これは実動コードだからです。 – Achshar

+0

「ジェイソン」は、すべての「金曜日の13日」映画の男です:)。あなたは "JavaScript Object Notation"または "JSON"を考えています。 – paulsm4

答えて

1

おそらくいくつかの誤解を離れて移動するが、これは答えよりも長いコメントですします

あなたのデータベースがあるテーブルやfiels。それは完全に有効です。データを保存し、クエリを処理するのは、データベースサーバーの仕事です。あなた自身のコードは、データベースのコードよりもテーブルを結合する方が決して優れていません。データベースサーバーはタスク用に最適化されているためです。

私は、すべてのデータをクエリしてJSON経由でWebアプリケーションに配置するというアイデアは単なる悪い考えです。特定のデータが必要な場合はサーバに問い合わせ、サーバは関連するSQLクエリを作成し、データベースサーバに送信し、結果を取得し、結果をJSONに変換してブラウザに返します。

+0

ありがとう!しかし、計算結果のようなものはどうですか?これは通常、1つの質問につきマークが追加されるので、クラス平均を見るときに特別な計算が多く必要になります。したがって、最初に試験ごとの結果を得るためにデータベースに照会するのではなく、1人の学生につき1クラスごとに行うことは、必要な質問と生徒データを取り出し、JavaScriptを使用して多レベルの計算を行い、 JSは、すべてのユーザーが単一のサーバーではなく自分の負荷を取るため、すべてのユーザーが一般的に実行するため、一般的にはより高速で効率的になります。 – Achshar

+0

MySQLには集計関数もあり、算術計算も行うことができます。それが高速ではないのと同様に、サーバーとブラウザの間で転送する必要があるデータの量を減らすことができるのだろうかと思います。サーバー側の計算は、おそらくデータ全体をワイヤーで転送するよりも高速です。しかしおそらくそうではありません。次に、スピードを心配して試してみると、2つの選択肢のどちらが速いかを知る必要があります。あなたは事前に知っていることはありません。 – hakre

+0

Hmm seiengそれはJavaScriptのやり方ではまだブラウザの互換性が必要だと思う、私はそれをサーバー側で行うべきだと思う。あなたは、ページの始めに必要なすべてのテーブルへの呼び出しを変数に格納することについて考えています。そしてテーブルの呼び出しをやり直さずに、ページ全体で何度も使用することができます。あるテーブルの情報が必要だが、別のテーブルの情報に依存する状況を扱う従来の方法は何ですか?ループでdb呼び出しを行うのは間違っています..そうですか? – Achshar

0

AJAX(Asynchronus Javascript and XML)では、ページの主要部分がペイントされた後で、その場でデータをフェッチすることができます。すべてが平等であれば、それを標準(データをフェッチしてページをペイントする)のレイアウトとして設計する方が簡単かもしれません。アプリケーションを正しく設計すると、個々のコンポーネント(出席者、教師、グレードなど)を呼び出す前にページレンダリングまたはポストページレンダリングを行うことができます。 AJAXルートを使用することで明らかにセキュリティ上の懸念(URLハッキング)があり、個人的には非AJAXをデザインします。

+0

私はあなたの意見に同意しますが、この場合、サーバーの帯域幅は非常に平均的です。 (低予算)だから私はリソースが賢明にリソースを使用して、結果が出る日にサイトをプルダウンしないようにしなければならない。 非アヤックスのアプローチでは、ページの始めに必要なすべてのテーブルを呼び出して変数に格納することについて考えています。その結果、ページ全体で何度も使用できます。 – Achshar

+0

@Achsharいくつかの前処理を行うSQLビューと、それ以上の処理を行うサーバーレイヤーから離れていくことができます。あなたが本当にスループットを心配しているのであれば、私は最初に私のコードをプロファイリングして、たくさんの不要なループを実行していないことを確認し、最初に最大の釘を探します。実際には、クエリを実行する必要があるデータの量と、ビジターが持つコンピューティングレベルを比較して求めているビジターの量によって異なります。 10年以上前に引退したはずのPoSコンピュータでデータ計算をアンロードすることで、何もしません – Hasteur

+0

確かに。私はステートメントに参加し、PHPでサーバー側にいまだに問い合わせを行います。それは答えのようです。ありがとう! – Achshar

関連する問題