Я наткнулся на вопрос о практике хранения данных. Я пытался думать о различных способах разработки этого, но я не уверен, каковы лучшие практики. Вопрос касается проектирования хранилища данных для парковки и написания SQL-запроса для получения платы за парковку.
Ограничения следующие:
Почасовая оплата в будние дни
Двухколесный - 1$
Четырехколесный - 2$
Почасовая оплата выходного дня
Двухколесный - 2$
Четырехколесный - 3$
Автомобиль стоит на стоянке с 9 утра пятницы до 10 утра субботы. Создайте хранилище данных для хранения этих данных и напишите SQL, чтобы получить плату за парковку для транспортного средства.
Ниже я мог придумать только два способа его представления:
Имея date_id, time_id и тип. Здесь может быть сложно запросить плату за парковку, поскольку у нас нет данных за час. Трудно рассчитать плату за парковку, но потребляет меньше данных
fact_parking_lot_data
| fact_key | Vehicle_id | date_id | time_id | тип |
|---|---|---|---|---|
| 1 | 1 | 20220506 | 9 | в |
| 2 | 1 | 20220507 | 22 | из |
Имея date_id, time_id для каждого часа дня. Это создаст несколько записей в таблице фактов для транспортного средства, если транспортное средство припарковано на 2 дня, тогда у него будет 48 записей. Легко рассчитать плату за парковку, но требует много места для хранения
fact_parking_lot_data
| fact_key | Vehicle_id | date_id | time_id |
|---|---|---|---|
| 1 | 1 | 20220506 | 9 |
| 2 | 1 | 20220506 | 10 |
| 3 | 1 | 20220506 | 11 |
| 4 | 1 | 20220506 | 12 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
| 26 | 1 | 20220507 | 10 |
Любые мысли или предложения будут действительно оценены. Благодарю вас !





Ваша модель является наглядным примером накопительной таблицы моментальных снимков: внешними ключами к измерениям будут Vehicle_id, date_in_id, date_out_id, time_in_id и time_out_id. И как меру продолжительности стоянки.
Когда машина прибывает, заполняются поля date_in_id и time_in_id, но не date_out_id, time_out_id и продолжительность. Когда машина уезжает, заполняются поля date_out_id, time_out_id и продолжительность.
Это дает вам естественную метрику для расчета: общая продолжительность в течение дня или нескольких дней.
Недостатком накопительного снимка является то, что он требует поиска в таблице фактов и обновлений «исходящих» событий, но я предполагаю, что ваша таблица фактов не будет слишком большой (у вас нет location_id в вашей модели, поэтому я Я предполагаю, что речь идет о нескольких сотнях автомобилей в день, может быть, до пары тысяч).
Если вас не устраивает накапливающийся снимок, то я предпочитаю из двух предложенных вами моделей вторую, где каждый час заполняется, пока машина припаркована.
Теперь несколько замечаний:
Недостаток накопительного снимка по сравнению с вашей второй моделью (с 1 строкой за период времени): нет простого способа подсчитать, сколько автомобилей припарковано в данный момент времени. Вам придется считать строки во всей таблице фактов, где
(date_in_id < X or (date_in_id = X and time_in_id <= Y))
and
(date_out_id > X or (date_out_id = X and time_out_id > Y))
В то время как ваша модель позволяет вам быстро подсчитать, сколько автомобилей припарковано в любой момент, просто подсчитав все автомобили с
date_id = X and time_id = Y
Благодарю вас ! очень помог мне в понимании различных подходов