要序列化还是保留一个单独的表?

Hen*_*nno 0 php mysql

对于我来说,这个问题在很多不同的场合都有所提升,但如果没有给出具体的例子,很难解释.所以这里:

让我们想象一下,我们正在PHP/MySQL中创建一个问题跟踪器数据库.有一个"任务"表.现在,您需要跟踪与特定任务相关联的人员(已评论或未评论).当任务发生变化时,这些人将收到电子邮件.

有两种方法可以解决这种情况.一种是创建一个单独的表tasks_participants:

CREATE TABLE IF NOT EXISTS `task_participants` (
  `task_id` int(10) unsigned NOT NULL,
  `person_id` int(10) unsigned NOT NULL,
  UNIQUE KEY `task_id_person_id` (`task_id`,`person_id`)
);
Run Code Online (Sandbox Code Playgroud)

并查询此表SELECT person_id WHERE task_id='XXX'.

如果有5000个任务,每个任务平均有4个参与者(记者,任务带来的主题,求解者和一个评论者)那么task_participants表将是5000*4 = 20 000行.

还有另一种方法:在tasks表中创建一个字段并存储person_id的序列化数组(JSON或PHP serialize()).然后就不需要这个20 000行的表.

你有什么评论,你会走哪条路?

Dan*_*ite 6

使用多个记录.它促进了数据库规范化.规范化非常重要.更新序列化值维护起来并不好玩.有了多条记录,我可以让数据库完成工作INSERT,UPDATEDELETE.此外,您通过使用多值列来限制未来的连接.