Лучшая практика для вставки нескольких контактов для одной записи в MySQL - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть таблица с именем booking , в которой есть столбец contact_number .

Как лучше вводить несколько контактных номеров для одного бронирования?Я приложил изображение, в котором 1 запись имеет контактные номера, разделенные запятыми, и 2 другие записи для одного и того же бронирования.Последнее, о чем я думаю, - это создать отдельную таблицу для контактов.Какой будет лучший способ?

Будет массив для нескольких контактов, я кодирую в codeigniter.

enter image description here

Ответы [ 4 ]

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

Создайте массив и закодируйте его с помощью JSON

$contact_number = array(
'mobile' => '+1 32313213',
'fax' => '+1 32432432',
'phone' => '+1 8984234234'
);

$booking_contact = json_encode($contact_number);

Теперь вы можете вставить $booking_contact в свою базу данных.Если вы хотите использовать его, просто декодируйте JSON, передавая true для ассоциативного массива

//Suppose $row is containing you row result

$booking_contact = json_decode($row['booking_contact'], true);

echo $booking_contact['mobile']; // Output +1 32313213
echo $booking_contact['fax']; // Output +1 32313213
echo $booking_contact['phone']; // Output +1 8984234234
0 голосов
/ 14 февраля 2019

Есть 3 способа, которыми я могу придумать:

  1. Использование отдельной таблицы и связь один-ко-многим с бронированием

    • лучше всего подходит длямасштабируемость, индексация, архитектура
  2. Использование строки JSON для хранения их в одном поле

    • , поиск в которой затруднен, если вы планируете не использовать егогде-то, кроме страницы бронирования, лучше
  3. Использование нескольких полей, например, до 5 (контактный номер 1, контактный номер 2 ..)

    • если вы думаете, чтобы установить ограничение для этого, и вы можете когда-нибудь искать номер

Выберите мудро.Подумайте, что вам (будет) нужно и что вы планируете делать сначала, а затем выберите метод.

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

В СУБД существует невысказанное правило - никогда не используйте запятые для целей отношений m: n - это просто нарушение первой нормальной формы.

Для получения дополнительной информации по этому вопросувзгляд здесь

В вашем случае вам понадобится:

  • Таблица - booking (как вы уже упоминали)
  • Таблица - contact (я предполагаю, что у вас уже есть такая, поскольку у вас уже есть номера) Таблица
  • Таблица - booking_contact с полями (booking_id, contact_id)

Теперь, если вы хотите, чтобы все контакты из идентификатора бронирования, вы просто пишете в стиле Codeigniter

$query = $this->db
    ->select('*')
    ->from('contact c')
    ->join('booking_contact bc', 'c.contact_id = bc.contact_id', 'left')
    ->join('booking b', 'bc.booking_id = b.booking_id')
    ->where('b.booking_id', 1)
    ->get();
0 голосов
/ 14 февраля 2019

на вашем месте я бы составил таблицу с информацией о клиентах.Если у него [клиента] есть несколько контактных номеров, вы можете сделать столбец «больше информации» (что-то вроде этого), и когда они снова закажут, вы узнаете, кто они, у них уже будет запись.Это даст вам ощущение, что вы помните, кто они (что-то вроде рыночных стратегий [возможно?])

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