3

私のソフトウェア (PHP で作成) を使用すると、ユーザーは HTML フォームを使用して「履歴書」の情報を入力できます。この「履歴書」には、ユーザーの学歴、職歴、賞、カバー レターなど、いくつかの異なる要素があります。各要素は、含まれるデータが一意です。たとえば、教育には、卒業年、学校名、学位などのフィールドが必要です。

私の質問は、履歴書データを mySQL データベースに保存するための最良の方法は何でしょうか? 私の現在の選択肢は次のとおりです。

  • 履歴書の各要素 (resume_education、resume_awards など) ごとに個別のテーブルを作成します。
  • 履歴書のすべての要素に対して 1 つのテーブルを使用し、要素データを多次元配列の形式で挿入します。(IE: 教育、職歴、何とかなどの列を持つ履歴書データを保持する 1 つのテーブル。教育または同様の分野のデータは、("grad_year"=>"1990", "school_name"=>" などの配列にコンパイルされます) Cool School") など、指示文字の使用法が新しい分野を表す類似のもの)。

最初の選択肢はメンテナンスとコーディングを容易にしますが、2 番目の選択肢はバックアップとロード時間、およびデータベースのメンテナンスを大幅に削減するように見えます。たぶん、まったくより良いアプローチがありますか?あなたは何をお勧めします ?

4

3 に答える 3

1

選択肢 2 は明らかに間違いです。データを行と列に分解せず、データ正規化の少なくとも最初の 2 つのルールに従わない場合は、リレーショナル データベースを使用する理由はありません (ファイル システム フォルダーで XML ドキュメントを使用できます)。

オプション 1 がおそらく最も正しいでしょう。すべての要素がすべての履歴書に存在し、履歴書内で要素が繰り返されないと予想される場合、実際には履歴書全体に対して 1 つのテーブルを作成し、各フィールドをそれぞれの列に配置できます。これらの条件が満たされているとは思えないため (たとえば、職歴と学歴はおそらく繰り返し可能な要素であるべきです)、要素ごとに個別の表が正しい選択です。

于 2013-01-08T04:36:44.360 に答える
1

複数のテーブルを使用しますが、より一般的な名前付きテーブルは使用しません。

例えば。テーブル

resume_section
id,name
1,personal details
2,education
3,work history

resume_section_attributes
id,resume_section_id,name
1,1,name
2,1,phone
3,1,email
4,2,school_name
5,2,grad_year
6,3,company_name
7,3,number_of_years

user_resume
id,user_id,resume_section_attribute_id,value
1,99,1,My Name
2,99,2,12345678

ユーザーの履歴書を作成する場合は、ユーザーの履歴書テーブルに直接移動して、すべての詳細を取得し、属性名などの属性テーブルと結合できます。表示する属性の順序を変更したり、新しいものを簡単に追加したりできます。必要に応じて設定します。電話番号の数などに制限を設定します。拡張の可能性は無限大です。

于 2013-01-08T04:38:03.640 に答える
0

間違いなくオプション 1 を使用してください。優れたデータベース設計は不可欠であり、優れたデータベース設計には、独自のテーブルで個別のエンティティをモデル化する場合にのみ可能なデータの正規化が含まれます。

データベースの正規化に関するこの記事を参照してください。この記事では、関連する概念について十分に説明しています。

于 2013-01-08T04:31:42.123 に答える