2017-09-23 87 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「在什麼時候我應該創建一個單獨的表?」是一個複雜的答案,需要學習一些東西的基本問題。)

相關問題