未知数のレコードをデータベースに格納する最も効率的な方法は何ですか?

私が持っている可能性のあるデータの量をあらかじめ知っていないと、データを保存する最良の方法は何ですか?

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

私は this ;それは理想的でしょうか?

1

4 答え

はい、これは実際には「最初の正規形」です

あなたはPersonテーブルを持っています

  • PersonID
  • ..

とジョブテーブル

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

インスピレーションのための無料のデータモデルをご覧ください

1
追加された

典型的な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に置き換えられます。これは、会社が過去何人いるかを見ることができます。

0
追加された