1

私が働いている学校の授業観察システムを書いています。

データベース構造は次のようになります。

データベース構造

私は現在、Observationsテーブルの入力フォームを開発しており、そのフィールドのかなりの数にチェックボックスが必要です。たとえば、Focusフィールドは任意の 12 個のオプションにすることができます。PositiveおよびNegativeフィールドはそれぞれ、ほぼ 20 の任意の数のオプションにすることができます。

上の画像では、 'd 配列VARCHARを許可していました。serialize

ただし、特に、データの半複雑な分析を行いたい場合があることを考えると、これが最善のルートであるかどうか疑問に思い始めています(これには、スタッフの各メンバーが持っている属性top 5 staff for a specific positive attribute such as behaviourの数を数えることが含まれます)テーブル内behaviourPositiveフィールド)。Observations

ここに 2 つの質問があります。

  • 追加のテーブルを使用する必要がありますか? Focus最初のテーブルには 3 つのフィールド(IDキーと自動インクリメント)Observation_IDFocus_ID. は、 または と という 2 つのフィールドを持つFocus_ID別のテーブルと関連付けられます。/ には 2 つのテーブル、 /には 3つのテーブルが必要です(オプションは同じですが、ロギングは異なります)。fociiFocus_IDTitleFocusPositiveDevelopment
  • Observationsこれらの追加のデータベース テーブルを使用すると、関連するすべてのfocusespositivesおよびを含むテーブルから情報を取得しようとすると、SQL ステートメントはどのようになりdevelopmentsますか?

前もって感謝します、

4

1 に答える 1

3

はい、この種の状況では常に正規化する必要があります。シリアル化されたデータを保存することは、計算や変更を行う場合でも地獄です。(どのように 3 番目の要素を削除するつもりですか?)

クエリの例:

SELECT 
    o.id, 
    COUNT(f.id) AS number_of_focusses 
FROM 
    observations o 
INNER JOIN focuses f 
    ON f.observation_id = o.id 
GROUP BY id

これにより、各観測に属する「フォーカス レコード」の数が得られます。

于 2012-09-17T10:29:00.230 に答える