データがどれくらいのデータ量であるかを事前に把握していないと、データを保存する最良の方法は何ですか?データベースに未知数のレコードを格納する最も効率的な方法は何ですか?
私は、たくさんの人の就職履歴を把握したいと思っていますが、各人がどれだけ多くの場所で働いたかは分かりません。恣意的な最大の仕事のために適切なスペースをあてにしたり、何か他の方法で保管したりするのが最善でしょうか?
thisのような別のテーブルにジョブを保存することを考えました。それは理想的でしょうか?
データがどれくらいのデータ量であるかを事前に把握していないと、データを保存する最良の方法は何ですか?データベースに未知数のレコードを格納する最も効率的な方法は何ですか?
私は、たくさんの人の就職履歴を把握したいと思っていますが、各人がどれだけ多くの場所で働いたかは分かりません。恣意的な最大の仕事のために適切なスペースをあてにしたり、何か他の方法で保管したりするのが最善でしょうか?
thisのような別のテーブルにジョブを保存することを考えました。それは理想的でしょうか?
はい、これはアクション
の "第1正規形" であるあなたは、Personテーブルに
とジョブテーブル
は用free data models hereを見てくださいインスピレーション
典型的な1対Nの関係のように聞こえます。
"Employees"というテーブルと "Jobs"というテーブルがあります。
あなたの仕事のテーブルには、以下のようになります。
| id | employee_id | job_title | job_infos... | current_flag | start_date | end_date |
それだけの仕事
はい、任意の 最大のための適切なスペースをたくさんするのがベストだろう。常にスキーマに任意の制限を設けるのを避けてください。このような何かを代わりに
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つの行を持っています。
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に置き換えられます。これは、会社が過去何人いるかを見ることができます。