在mysql中为单个记录插入多个联系人的最佳实践

时间:2019-02-14 11:00:20

标签: php mysql codeigniter mysqli

我有一个名为 booking 的表,该表的列为 contact_number

为单次预订插入多个联系电话的最佳做法是什么?我已附上一张图片,其中1个条目的联系电话用逗号隔开,而其他2个条目的预订相同。我想到的最后一件事是为联系人创建一个单独的表。最好的方法是什么?

我要在codeigniter中编写一个用于多个联系人的数组。

enter image description here

4 个答案:

答案 0 :(得分:2)

如果我是您,我会在客户表中添加客户信息。如果他们(客户)有多个联系电话,则可以在“更多信息”列中输入类似信息,当他们再次预订您的身份时,他们将已经有一个记录。它会给您一种记住他们是谁的感觉(有点像市场策略[也许?])

答案 1 :(得分:2)

我可以想到3种方式:

  1. 使用单独的表格并与预订有一对多关系

    • 最适合可伸缩性,索引编制和体系结构
  2. 使用JSON字符串将它们存储在一个字段中

    • 不容易搜索,如果您打算不在预订页面之外的其他地方使用它,那会更好
  3. 使用多个字段,例如最多5个(联系电话1,联系电话2 ..)

    • 如果您想为此设置一个限制,并且有时可以搜索一个数字

明智地选择。首先考虑您(将)需要什么以及您打算做什么,然后选择方法。

答案 2 :(得分:1)

创建一个数组并使用JSON编码

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

$booking_contact = json_encode($contact_number);

现在,您可以将$booking_contact插入数据库。如果要使用它,只需解码JSON即可将关联数组传递为真

//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

答案 3 :(得分:0)

RDBMS中有一个潜规则-绝不使用以逗号分隔的字符串来实现m:n关系-这完全违反了第一个范式。

  

有关此问题的更多信息,请查看here

您需要的是:

  • 表格-booking(如您已经提到的)
  • 一张桌子-contact(我假设您已经有一个桌子,因为您已经有数字了)一张桌子
  • 表-booking_contact,其中包含字段(booking_idcontact_id

现在,如果您希望预订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();
相关问题