2013-12-16 30 views
1

哪一個會更好(性能明智和維護),一個動態創建表或只是動態添加行的數據庫?不定數量的表vs不定數量的多列

假設我正在建立一個項目,讓我們讓用戶註冊。假設我有一個只存儲基本個人信息的表格,例如姓名,dob,加入日期,地址,電話等。說10欄。

現在是棘手的部分。

場景1:創建多個表

當用戶完成註冊,則創建一個消息表。所以每個表格都是爲每個用戶創建的。每個消息表的行不同,每個用戶。

以同樣的方式,像消息表一樣,每個用戶都有一個購物車表。

對於這個場景1,每個註冊創建2個表格。

場景2:添加行

的情況是同樣在這裏爲好,但在這種情況下,我對消息和車2臺。行僅在有活動時添加。

注:

你必須假定用戶數超過2000,預計50歲以上的用戶是積極的所有時間。這意味着消息和購物車表總是忙於兩種情況。像總是有更新,添加,刪除,插入,選擇等同時查詢。

哪個場景會消耗更多的磁盤空間。

寫這篇文章時,我想知道Facebook和其他人使用什麼技術。如果他們使用場景2樣式(所有用戶(10億)使用相同的大長信息表)......只是想知道

+4

我認爲,對每一位用戶創建一個表是瘋狂,你會爲每個用戶單獨創建的表,如果他們是活躍與否。在需要選擇10億個表格或者具有10億行的一個表格的場景中,最後一個顯然是大多數數據庫引擎製作的那個 – Lamak

+0

因此,搜索行比搜索表更容易。謝謝 – Facbed

+0

想要查詢僅由部分用戶生成的消息的場景。對於所有用戶而言,只需一個表格就可以輕鬆實現。事實上,相反的情況會非常糟糕。 – Drumbeg

回答

4

數據庫已經爲數據庫設計定義一些基本的規則叫做 「數據庫規範化」,這些基本規則允許我們消除冗餘數據。

1日範式
存放在只有一列一條信息,A柱應該只存儲一個信息。

2ns正常形式
表應該只有彼此相關的列。所有相關的列應該在一個表中。

現在,如果你看看你的建議設計,每個用戶的獨立表格 將拆分關於所有用戶在1000年的 表中的相同信息/列。這違反了第二範式。

您需要創建一個表格,並將所有相關列放在該表格的所有用戶的 表中。你可以使用正常的T-SQL來 查詢您的數據,但如果你有一個表,爲每一個用戶我的猜測是你 你從你的應用程序中執行的每個查詢將被動態構建 併爲每個查詢您將使用動態sql。其中 是Sql惡魔之一,你想避免使用它,只要 可能。

我的建議將被閱讀更多關於數據庫設計。一旦你對 有一些基本的數據庫設計理解。繪製在一張紙上 的,看看它是否爲您提供您的業務需要 從該應用程序/期望的一切,花一段時間就可以了,現在它 稍後會爲你節省很多的痛苦。

+1

ouf ...剛纔看到這個問題,我感到很緊張!我很高興你提供了一個答案。 –

+0

我的榮幸讓我花了整整7分鐘時間寫下來並格式化它:) –

相關問題