2017-09-23 81 views
0

我和一个朋友正在研究一个存储有关cPanel托管帐户信息的数据库,例如每个帐户正在使用的设置,应用程序和功能。我应该在什么时候创建一个单独的表(mysql)?

大多数字段是布尔,如是否该帐户有任何WordPress网站,任何PHP 5.4驱动的网站,在轨道站点的任何红宝石,等等

领域少数是非-boolean数据,如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来将与一个单一帐户关联的数据添加到三个单独的表中确实很困难,除此之外没有任何帐户唯一的密钥这将使得更新现有数据变得容易。

很抱歉,如果这一切都不是有道理

回答

0

忽略ID,你找出你的CK(候选键)是什么以及你是否应该分解的方式是归一化到更高NF(正常形式)的主题。这正式表达了“一个表中的一行可以引用另一行中的多行”(等等)的概念。在这里用常识猜测,没有特别需要分解。在业务层面引入不可见的ID总是在技术上是不必要的,但是由于其自身的实际/人类工程学原因而发生。进一步的解释/理由是信息建模&数据库设计教科书章节设计,CKs,NFs &代理 - 读一些。含糊不清的概念,如“相同类型的数据”,没有帮助。

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

相关问题