繁体   English   中英

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

[英]Best practice to insert multiple contacts for single record in mysql

我有一个名为booking的表,其中有一个contact_number列。

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

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

在此处输入图片说明

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

我可以想到3种方式:

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

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

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

    • 如果您认为要为此设置一个限制,则有时可以搜索一个数字

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

创建一个数组并使用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

RDBMS中有一个潜规则-永远不要使用逗号分隔的字符串来实现m:n关系-只是违反了第一个范式。

有关此问题的更多信息,请看这里

在您的情况下,您需要:

  • 表- 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM