В системе, над которой я работаю, мы позволяем клиентам делать резервирование для многих вещей. В настоящее время у меня есть эти 2 лица:
@Entity
public class Reservation implements Serializable {
...
private long startTime;
private long endTime;
private int status;
@ManyToOne
private Customer theCustomer; // record who made this reservation
@ManyToOne
private ReservableUnit theUnit; // record what this reservation is for
...
}
@Entity
public class ReservableUnit implements Serializable {
private int numOfAvailableUnits;
...
private int[][][] firstMonth = new int[31][24][2];
...
private int[][][] fourthMonth = new int[31][24][2];
}
//status
public static final int AVAILABLE = 0;
public static final int BLOCKED = 1;
public static final int RESERVED = 2;
В таблице ReservableUnit у меня есть 4 массива int [31] [24] [2] для хранения состояния всех 30-минутных временных интервалов до 3 месяцев вперед. Я использовал массивы, потому что думаю, что когда я перенесу их в память, будет быстро проверить, доступны ли запрошенные временные интервалы или нет.
Мой друг сказал мне, что это не очень хороший подход, потому что я должен хранить большие объекты в базе данных. Он предложил мне удалить эти поля, и когда мне нужно проверить, доступны ли слоты, я должен подсчитать количество резервирований, которые были сделаны для этих слотов, путем подсчета строк в таблице резервирования. Очевидно, что путь моего друга может сэкономить нам место в базе данных. Однако в долгосрочной перспективе у нас будет много строк в таблице резервирования, что означает, что обработка состояния слотов займет все больше и больше времени.
Я студент без большого опыта работы над проектированием базы данных. Поэтому я был бы очень признателен, если бы кто-нибудь дал мне совет по этому вопросу.
С уважением,
Джеймс Тран