Что такое хороший способ реализации резервирования базы данных EJB 3.0 - PullRequest
2 голосов
/ 03 октября 2011

В системе, над которой я работаю, мы позволяем клиентам делать резервирование для многих вещей. В настоящее время у меня есть эти 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 месяцев вперед. Я использовал массивы, потому что думаю, что когда я перенесу их в память, будет быстро проверить, доступны ли запрошенные временные интервалы или нет.

Мой друг сказал мне, что это не очень хороший подход, потому что я должен хранить большие объекты в базе данных. Он предложил мне удалить эти поля, и когда мне нужно проверить, доступны ли слоты, я должен подсчитать количество резервирований, которые были сделаны для этих слотов, путем подсчета строк в таблице резервирования. Очевидно, что путь моего друга может сэкономить нам место в базе данных. Однако в долгосрочной перспективе у нас будет много строк в таблице резервирования, что означает, что обработка состояния слотов займет все больше и больше времени.

Я студент без большого опыта работы над проектированием базы данных. Поэтому я был бы очень признателен, если бы кто-нибудь дал мне совет по этому вопросу.

С уважением,

Джеймс Тран

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...