как правильно составить поля в БД , Laravel?

Не понятно до конца, какие поля должны быть в БД? Свои предположения написал в таблицу ниже.

Это информация – все что есть в тестовом:

Задача «Календарь»

Написать Rest API для ведения личного календаря.

GET /calendar Возвращает все записи в интервале между параметрами date_start и date_end.

POST /calendar Добавление новой записи в календарь.
Запись добавляется на конкретное время date и с конкретной длительностью в минутах duration. Также у записи есть поля title (обязательное) и description (не обязательное).

Если запись добавляет аутентифицированный пользователь, то возможно наложение различных записей по времени (например, 13:00-14:30 и 14:00-15:00).

Если запись добавляется анонимным пользователем, то наложение времени недоступно.

Насколько я понял, то примерно так:

public function up()
    {
        Schema::create('calendars', function (Blueprint $table) {
            $table->id();
            $table->date('date');
            $table->date('duration');
            $table->string('title');
            $table->text('description')->nullable();
            $table->timestamps();
        });
    }

Ответы (1 шт):

Автор решения: Vladimir Gonchar

"date_start и date_end" – это параметры, которые манипулируют промежутком времени по созданным карточкам из полей date или created_at (WHERE created_at > {date_start} AND created_at < {date_end}) в зависимости от контекста задачи (созданы ли карточки или на какое время назначена карточка в инвентаре). Соответственно, это не учитываем.

date должен быть типа timestamp, потому что учитываем ещё и время начала. duration должен быть типа int, так как это число минут. Наложения уже в коде обрабатываются, в базе это нет смысла как-то обозначать.

Так как учитывается пользователь, нужно поле с его id, которое ссылается на таблицу users.

Получится такая миграция:

Schema::create('calendars', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->nullable()->constrained('users')->onDelete('cascade');
    $table->timestamp('date');
    $table->integer('duration');
    $table->string('title');
    $table->text('description')->nullable();
    $table->timestamps();
});
→ Ссылка