gpt4 book ai didi

关于 web 的 MySQL 设计

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:25 25 4
gpt4 key购买 nike

我正在解决类里面的一个问题,即设计一个 web 的 mySQL 表示,该 Web 存储与一个人相关的事件列表。因此,对于这个/多个表,它将有 2 列,其中一列是人名,另一列是事件。然而,一个人通常会有 30 到 1000 个事件,因此我们计划为 6000 名学生的整个本科类(class)制作的这张表将有数百万个条目。有没有更好的方法将其存储在 mySQL 中,占用更少的空间,但仍然能够检索单个事件和参加它的人员列表,就像它是一张表一样容易两列?

最佳答案

是的,有一种称为多对多的技术,它基本上将您的一个表分成三个,当您考虑确实恰好有三个实体被建模时(作为一个良好的完整性检查)

  1. 个人
  2. 事件
  3. 一个人与一个事件的关联

您将其建模为三个表,前两个基本上各有两列:一个具有唯一索引(称为“主键”),第二个是语义名称(人名、事件名称)。请注意,您还可以向其中添加任意数量的列,而只有一个因素会增加存储空间(很可能您的第一步是向事件表中添加一个日期列)。

第三个表很有趣,它只包含 2 列,每一列都是数字,这两列都是对其他表的引用(每行只是:(person_id,event_id))。我们将这些称为“外键”。

这个结构意味着几件事:

  1. 无论某人参加多少次事件,该人都只代表一次。
  2. 与事件相同,无论有多少人参加
  3. 考勤是一个“一流”的实体,可以成长为包含它自己的属性(即“角色”)

这种结构称为多对多,因为每个人可能会参加很多事件,而每个事件可能有很多人参加。

该设计的典型特征是没有重复任何领域知识,仅在必要时重复“ key ”以对真实领域进​​行建模。 (即在您的第一个示例中,考虑名称更改将需要未知数量的更新,并可能导致数据异常,避免这种情况是 database normalization 的主要关注点。

关于关于 web 的 MySQL 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com