Wat is de meest efficiënte manier om een ​​onbekend aantal records in een database op te slaan?

Wat is de beste manier om gegevens op te slaan als ik van tevoren niet weet hoeveel gegevens ik kan hebben?

De toepassing is dat ik de arbeidsverleden van een aantal mensen wil bijhouden, maar ik weet niet hoeveel plaatsen elke persoon heeft gewerkt. Zou het het beste zijn om gewoon de juiste ruimte te gebruiken voor een willekeurig maximum aantal banen of het op een andere manier op te slaan?

Ik dacht eraan de taken in een andere tabel op te slaan, zoals deze ; zou dat ideaal zijn?

1

4 antwoord

Ja, dit is "eerste normale vorm" in actie

Je zou een persoonstabel hebben

  • PersonID
  • Voornaam
  • Achternaam
  • ..

en een Job-tabel

  • PersonID (FK, PK)
  • JobStartDate (PK)
  • JobFinishDate
  • Titel
  • Salaris
  • ...

Bekijk de gratis gegevensmodellen hier voor inspiratie

1
toegevoegd

Het klinkt als een typische 1-op-N-relatie.

U hebt een tabel met de naam "Werknemers" en een tabel met de naam "Banen".

Uw jobtabel ziet er als volgt uit:

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

Zou het het beste zijn om gewoon de juiste ruimte voor een willekeurige te gebruiken   maximaal aantal banen

Ja. Probeer altijd te vermijden willekeurige arbitraire beperkingen in uw schema te bouwen. Blijf uit de buurt van dit soort dingen:

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

En in plaats daarvan doe je zoiets als dit:

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

U hebt dus één rij voor elke medewerker plus één rij voor de eerdere taken van elke werknemer.

0
toegevoegd
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

Je zou waarschijnlijk ook willen kijken naar het toevoegen van een buitenlandse sleutel tussen de employment_history.employee_id en employee.id.

Met deze structuur kunt u net zoveel geschiedenisrecords voor een bepaalde werknemer toevoegen zonder uw gegevens te denormaliseren. Als u om werkgevers geeft, kunt u ook vinden dat employment_history.name wordt vervangen door een employment_history.employer_id met de bijbehorende tabelinstellingen voor werkgevers. Hiermee kunt u bekijken hoeveel werknemers in het verleden en heden een bedrijf ook heeft.

0
toegevoegd