2011-10-27 12 views
1

データがどれくらいのデータ量であるかを事前に把握していないと、データを保存する最良の方法は何ですか?データベースに未知数のレコードを格納する最も効率的な方法は何ですか?

私は、たくさんの人の就職履歴を把握したいと思っていますが、各人がどれだけ多くの場所で働いたかは分かりません。恣意的な最大の仕事のために適切なスペースをあてにしたり、何か他の方法で保管したりするのが最善でしょうか?

thisのような別のテーブルにジョブを保存することを考えました。それは理想的でしょうか?

答えて

1

はい、これはアクション

の "第1正規形" であるあなたは、Personテーブルに

  • を持っていると思いますPERSONID
  • ..

とジョブテーブル

  • PERSONID(FK、PK)
  • JobStartDate(PK)
  • JobFinishDate
  • タイトル
  • 給与
  • ...

は用free data models hereを見てくださいインスピレーション

0

典型的な1対Nの関係のように聞こえます。

"Employees"というテーブルと "Jobs"というテーブルがあります。

あなたの仕事のテーブルには、以下のようになります。

| id | employee_id | job_title | job_infos... | current_flag | start_date | end_date | 
0

それだけの仕事

はい、任意の 最大のための適切なスペースをたくさんするのがベストだろう。常にスキーマに任意の制限を設けるのを避けてください。このような何かを代わりに

create table employee 
(
    id int primary key, 
    name text, 
    job1_employer text, 
    job1_position text, 
    job2_employer text, 
    job2_position text 
); 

をそして:この種のものから離れて滞在

create table employee 
(
    id int primary key, 
    name text, 
    ... 
); 

create table job_history 
(
    id int primary key, 
    employee_id int references employee, 
    employer text, 
    position text, 
    ... 
); 

だから、あなたは従業員ごとに1行、プラス各従業員の過去の仕事のための1つの行を持っています。

0
CREATE TABLE `employee` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 


CREATE TABLE `employment_history` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `employee_id` int(11) unsigned NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `start_date` date NOT NULL, 
    `end_date` date DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

あなたはおそらく、employ_history.employee_idとemployee.idの間にforiegnキーを追加することを検討したいでしょう。

この構造を使用すると、データを非正規化せずに、指定した従業員の履歴レコードをいくつでも追加できます。あなたが雇用者を気にしているなら、あなたは、雇用者歴テーブルが設定された雇用歴=雇用主雇用者IDに置き換えられます。これは、会社が過去何人いるかを見ることができます。

関連する問題