我应该在什么时候创建一个单独的表(mysql)?

我应该在什么时候创建一个单独的表(mysql)?,mysql,sql,Mysql,Sql,我和一位朋友正在开发一个数据库,该数据库存储有关cPanel托管帐户的信息,例如每个帐户使用的设置、应用程序和功能 大多数字段都是布尔值,例如帐户是否有任何wordpress站点、任何PHP5.4驱动的站点、任何RubyonRails站点等等 少数字段是非布尔数据,如磁盘使用量(MB)、帐户所在服务器的主机名以及帐户的用户名等 在我看来,将所有这些信息存储在一个表中是有意义的 因此,该表可能有以下列: php54 boolean, wordpress boolean, r

我和一位朋友正在开发一个数据库,该数据库存储有关cPanel托管帐户的信息,例如每个帐户使用的设置、应用程序和功能

大多数字段都是布尔值,例如帐户是否有任何wordpress站点、任何PHP5.4驱动的站点、任何RubyonRails站点等等

少数字段是非布尔数据,如磁盘使用量(MB)、帐户所在服务器的主机名以及帐户的用户名等

在我看来,将所有这些信息存储在一个表中是有意义的

因此,该表可能有以下列:

    php54 boolean,
    wordpress boolean,
    ror boolean,
    username varchar(8),
    hostname varchar(20),
    usage_mb int(9),
我认为主键可以是(用户名、主机名)

但是,我的朋友已经用多个表设置了数据库,如下所示:

事实表:

    id int(11),
    php54 boolean,
    wordpress boolean,
    ror boolean,
    usage_mb int(9),
用户表:

    id int(11),
    factid int(11),
    hostid int(11),
    username varchar(8)
主机名表:

    id int(11),
    hostname varchar(20),
    ip varchar(15),
其中,每个表的主键是“id”,用户表分别使用“hostid”和“factid”外键引用主机名表和事实表

我相信我的朋友在多个表背后的基本原理是根据数据类型组织数据,尽管所有数据都与一个唯一的帐户相关

我的理由是,由于所有数据都属于一个唯一的帐户,因此每一行都是1:1,所以有多个表有意义吗

如果一个表中的一行可以引用另一个表中的多行,我认为多个表是明智的。。。但在这种情况下,每个表中的每一行只能与任何其他表中的一行关联。。。所以我觉得一张桌子就可以了

这些数据应该在多个表中,还是在一个表中

我们两个都是那种边走边想办法的家伙

在哪一点上使用多个表是有意义的

目前,编写一个API将与一个帐户相关的数据添加到三个单独的表中是非常困难的,因为所有主键都是自动递增的,除此之外,没有任何帐户特有的键可以轻松更新现有数据


很抱歉,如果在您的情况下这些都没有意义,我不认为拥有多个具有一对一关系的表是正确的方式

这是不被禁止的,在某些情况下,这是有益的(
),但您必须处理请求中不必要的连接。

忽略ID,找出您的CKs(候选密钥)是什么以及是否应该分解的方式是规范化到更高级别NFs(普通表单)的主题。这使“一个表中的一行可以引用另一个表中的多行”(以及其他行)的概念正式化。根据这里的常识猜测,没有特别需要分解。在业务层面引入不可见的ID在技术上总是不必要的,但这是基于其自身的实际/人体工程学原因。进一步的解释/论证是信息建模和数据库设计教科书中关于设计、CKs、NFs和代理的章节——阅读一些。像“相同类型的数据”这样模糊的概念是没有帮助的

(TL;DR“我应该在什么时候创建一个单独的表格?”是一个基本问题,答案很复杂,需要学习一些东西。)