Реляционное моделирование вещей - это все о том, чтобы взять в реальном мире автономные единицы значения или «вещи» и отобразить отношения между каждым из них.В этом случае у вас есть:
Человек
Период работы, выполненной человеком
И связь между ними такова, что у одного человека может быть много периодов работы.
Итак, вам нужны две таблицы:
Таблица персон со столбцами для всех данныхна уровне человека, его имя, фамилия, возможно, должность и т. д. И чтобы упростить задачу, вы можете дать им автоматически увеличивающийся идентификатор первичного ключа, как у вас в вопросе.
Таблица журнала работ с столбцами person_id, датой и часами.Вам на самом деле не нужен автоинкрементный первичный ключ, поскольку можно использовать комбинацию person_id и date для однозначной идентификации строки.
Таблица person должна уже существовать и быть заполненной- откуда Эрик берется.Затем вы можете создать таблицу рабочего журнала с внешним ключом person_id, который ссылается на таблицу person.Таким образом, в типичном приложении это будет работать так:
На клиентской стороне дневной труд регистрируется для конкретного человека.Приложение отправляет запрос http POST на внутренний сервер со следующими данными:
fetch("/worklog/new", {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: "POST",
body: JSON.stringify({
person_id: 1,
date: '2018-11-15'
hours: 8
})
})
На вашем внутреннем сервере:
app.post('/worklog/new', (req, res) => {
const { person_id, date, hours } = req.body
const { Pool } = require('pg');
const pool = new Pool({
connectionString: process.env.DATABASE_URL
});
pool.query(`
INSERT INTO worklog (person_id, date, hours)
VALUES ($1, $2, $3)
`, [person_id, date, hours]).
.then(() => {
pool.end();
res.send('WORKLOG ADDITION SUCCESFUL')
})
.catch(err => {
pool.end();
console.error(err)
res.status(500).send('WORKLOG ADDITION FAILED')
})
});
Возможно, я что-то пропустил, но вы можете получить общее представлениесверху.Вам, конечно, нужно сначала создать таблицу person и таблицу worklog в вашей базе данных.
Альтернативой может быть вовсе не реляционное моделирование данных, а использование чего-то вроде MongoDB или DynamoDB для хранения данных какявляется.Вы также можете исследовать использование ORM, такого как sequelize, для облегчения вставки реляционных данных, или что-то вроде Mongoose, чтобы упростить MongoDB.Существует действительно огромное количество вариантов, когда речь идет о моделировании, хранении и извлечении данных.Однако если вашим приоритетом является анализ - выполнение сумм и средних значений, то реляционное хранилище, вероятно, является вашим лучшим выбором.