Я стажер интерфейсного разработчика. Никогда не любил бэкэнд, поэтому я очень мало знаю о SQL.
Но вот мы, в одно из тех приключений, когда мне нужно делать бэкэнд, потому что меня тоже назначили. Что ж, у нас есть внутренняя система для отслеживания некоторых данных о себе, которые мы восстанавливаем. Предыдущая система использовала файл JSON для хранения данных в следующем формате:
{
"id": 123,
"userId": 522,
"effortDate": "2020-06-05",
"data": [
{
"projectId": 14,
"value": 7
},
{
"projectId": 23,
"value": 3
}
],
"updatedAt": "2020-06-08T10:13:11-03:00",
"createdAt": "2020-06-08T10:13:11-03:00"
}
Мы переходим к базе данных на основе SQL. Итак, с моим базовым c пониманием того, как работают реляционные базы данных,
я построил эту модель:
Я построил эту модель .
Проблема в том, что, по крайней мере, сейчас мы используем тот же интерфейс для приложения, поэтому мне нужно, чтобы данные анализировались в том же формате, что и тогда, когда это был только JSON. И для основной c работы системы необходимо постоянно требовать все данные из двух таблиц now.
Моя первая идея заключалась в том, чтобы смешать их, ну, вы знаете, силой, двумя разными командами SELECT. Что, я думаю, не так уж и плохо (возможно, потому, что это работает) , за исключением того, что мы имеем дело с тысячами записей, поэтому я боюсь, что все может замедлиться. Вот код, который я использовал для его анализа:
public function getAllEfforts() {
/* Get all data from `effort` */
$effortQuery = "SELECT id, userId, effortDate, createdAt, updatedAt
FROM efforts;";
$efforts = $this->pdo
->query($effortQuery)
->fetchAll(PDO::FETCH_ASSOC);
/* Get all data from `effort_data` */
$effortDataQuery = "SELECT id, effortId, projectId, value
FROM efforts_data;";
$effortsData = $this->pdo
->query($effortDataQuery)
->fetchAll(PDO::FETCH_ASSOC);
/* Since, `effort` doesn't have a data field, let's define the array wished here */
foreach($efforts as &$effortsUnity) {
$effortsUnity['data'] = [];
}
/* Push the stuff from `effort_data` to the just created data array */
foreach($effortsData as &$effortDataUnity) {
$effortIndex = ($effortDataUnity['effortId'] - 1);
unset($effortDataUnity['id']);
unset($effortDataUnity['effortId']);
array_push(
$efforts[$effortIndex]['data'],
$effortDataUnity
);
}
return $efforts;
}
Мой вопрос: есть ли способ сделать это, используя только SQL? Или любой другой оптимальный способ сделать это помимо использования MongoDB или другой БД на основе JSON, что в настоящее время невозможно.
Извините, если я недостаточно ясно понял, это мой первый вопрос, я готов прояснить любые вопросы.
Большое спасибо.