Каков наиболее эффективный способ хранения неизвестного количества записей в базе данных? - PullRequest
1 голос
/ 27 октября 2011

Каков наилучший способ хранения данных, если я заранее не знаю, сколько у меня может быть данных?

Приложение состоит в том, что я хочу отслеживать историю занятости группы людей, но я не знаю, сколько мест работал каждый человек. Будет ли лучше просто выделить подходящее место для произвольного максимума рабочих мест или сохранить его как-нибудь иначе?

Я думал о сохранении заданий в другой таблице, например this ; это было бы идеально?

Ответы [ 4 ]

1 голос
/ 27 октября 2011

Да, это «первая нормальная форма» в действии

У вас будет таблица Person

  • PersonID
  • 1008 * FirstName *
  • LastName
  • ..

и рабочий стол

  • PersonID (FK, PK)
  • JobStartDate (PK)
  • JobFinishDate
  • Название
  • Зарплата
  • ...

Посмотрите на бесплатные модели данных здесь для вдохновения

0 голосов
/ 27 октября 2011
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

Возможно, вы захотите взглянуть на добавление внешнего ключа между Employment_history.employee_id и employee.id.

Эта структура позволит вам добавить столько записей истории для данного сотрудника без необходимости денормализации ваших данных. Если вы заботитесь о работодателях, вы также можете обнаружить, что имя_тверждения_Замена будет заменено на_Занятие_производства_производителя_данных с соответствующей настройкой таблицы работодателя. Это позволит вам увидеть, сколько прошлых и настоящих сотрудников также есть в компании.

0 голосов
/ 27 октября 2011

Лучше всего было бы просто выделить подходящее место для произвольного максимума рабочих мест

Да.Всегда старайтесь избегать встраивания произвольных ограничений в вашу схему.Держитесь подальше от такого рода вещей:

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,
    ...
);

Итак, у вас есть один ряд для каждого сотрудника, плюс один ряд для каждогопрошлые рабочие места сотрудника.

0 голосов
/ 27 октября 2011

Звучит как типичное отношение 1 к N.

У вас есть таблица с именем «Сотрудники» и таблица с именем «Работа».

Ваша рабочая таблица выглядит следующим образом:

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