Как хранить списки параметров в веб-приложении - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время мы разрабатываем новую базу данных, и я не уверен, как я хочу сохранить свои списки параметров.

Например, если у вас есть список приоритетов:

1  High
2  Medium
3  Low

или введите:

1 email
2 phone
3 text

Как их хранить?

Исторически я поместил их в таблицу базы данных (вариант 1):

Приоритеты

id description
1  High
2  Medium
3  Low

Результатом этого является то, что они становятся внешними ключами в других таблицах.

Альтернативой (вариант 2) является их сохранение в коде каксписок констант.

Плюсы и минусы

Опция 1

  • Гораздо проще в обслуживании, не нужно нажимать код.Вы просто добавляете страницы обслуживания для редактирования таблиц.
  • Гораздо больше обращений к базе данных каждый раз, когда вы хотите получить список.

Опция 2

  • Меньше обращений к БД.
  • Если список необходимо изменить, вам нужно изменить код, а затем нажать код.

Я что-то пропустил?Что такое обычная практика?

Приветствия

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Я бы выбрал вариант 2:

Вы можете поместить его в массив отдельного файла вне вашего кода, чтобы им было легче управлять, например:

types.php

<?php
return ['type' => ['email','phone','text']];

И требуйте его там, где вам нужно:

require '/types.php';

Сохраните массив в такой переменной, как $ options, и используйте $ options ['type'] в своем коде.

Конечно, вам нужно будет снова нажать свой код.Другой вариант - кэширование.

0 голосов
/ 21 февраля 2019

Я бы решил на основании следующих факторов:

1.Количество доступных значений:

Если это просто набор из 2 или 3 предопределенных значений, таких как приоритеты High, Medium, Low .. Я бы предпочел иметь его в кодовой базе в качестве констант,Поскольку маловероятно, что будут добавлены какие-либо новые опции, такие как very low или very very low и т. Д.

Если значения заданы заранее, но имеют большое количество, например, возможно, наборы навыков сотрудника. Я бы определенно поместил его втаблица базы данных.

2.Возможность изменения значений:

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

3.Частота использования:

Если эти значения являются ядром вашей системы и используются почти во всех запросах для фильтрации результатов, то вам также необходимо учитывать производительность:

Например: допустим, весь проект зависит от приоритетов High, Medium, Low.Вам нужно отфильтровать почти каждый запрос, используя приоритеты:

Если у констант будет priority, хранится в таблице tasks:

$tasks = Task::whereIn('priority', [high_constant, low_constant])->get();

Имеется отдельная таблица priorities иотношения с tasks с использованием priority_id внешнего ключа имеют:

$task = Task::whereHas('priority', function($q){
    return $q->whereIn('priority_name', ['high', 'low']);
})->get();

В зависимости от количества имеющихся у вас данных и частых запросов, вы можете проверить, что влияет на производительность.Если разница очень мала, я бы предпочел константы с пунктами 1 и 2.

4.Кроме того, например, получение идентификатора:

Допустим, у вас есть страница для создания новой задачи с выпадающим списком приоритетов.

Если у вас есть отдельная таблица, вам потребуется получить идентификатор этого приоритета из таблицы priorities, чтобы сохранить его как внешний ключ при сохранении задачи в таблице tasks.(На самом деле это не так уж сложно, но стоит упомянуть)

Если у вас есть константа, вы можете сохранить это значение напрямую.

Каждый из них имеет свои плюсы и минусы, я бы сделал свой выбор в основномв пунктах 1 и 2 выше.

Кроме того, если вы создаете константы, я бы предложил создать laravel фасад с псевдонимом, а затем определить в нем константы.Таким образом, вы можете использовать его как в своем проекте

Priority::HIGH или Priority::LOW

0 голосов
/ 21 февраля 2019

Я обычно делаю это с базой данных и внешними ключами.Вы уже попали в базу данных для получения информации, с простым вы можете получить правильные значения вместо идентификаторов.

Но если это только эти 2 списка ... Я не уверен, я стараюсь не использовать жестко закодированное значение
в моем коде, чтобы вносить простые изменения без обновления рабочего сервера.

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