簡體   English   中英

如何更好地建立數據庫

[英]How to better build a database

我們有一個 SQL 數據庫,其中有一個用於用戶的表 (1) 和一個用於用戶保存信息的表 (2)。 每條信息在表(2)中占一行。 所以我的問題如下 - 如果我們打算將用戶數量增加到超過 1.000.000 並且每個用戶可以擁有超過 10 條信息,那么以下哪種方法是構建我們的數據庫的更好方法:

a) 有 2 個表 - 1 個用於用戶,1 個用於所有用戶的信息,與具有 ID 的用戶相關

b) 每個用戶都有一個單獨的表。

提前致謝。

絕對應該為用戶提供一個單一的表要好得多。 從數據庫的角度考慮。 您正在考慮排序 ID 的 1.000.000 行中的搜索時間。 在第二種情況下,您必須搜索 1.000.000 表才能進入正確的表。 所以最好選擇選項A

我同意選項 A 是所提供的兩個選項中更好的一個。

話雖如此,我個人也會將用戶的信息分解成更多的表。 這一切都將使用外鍵連接,並允許對信息進行更具體的查詢。

SQL 並不是真正的水平可擴展性,因此如果最終用戶的信息比其他人少或多,那么您將擁有 NULL 列,這需要以各種方式處理。

通過使用單獨的表格,您仍然可以包含所有信息,但不必擔心如果一個用戶有家庭電話號碼和手機號碼,而另一個用戶只有手機號碼。

如果您確實需要一次訪問大量信息,SQL 非常擅長通過聯接等來處理此問題。

選項 B 還不錯,只是不適合 SQL。 如果有問題的數據庫是基於文檔而不是表格,我會工作。 在這種情況下,為每個用戶創建一個文檔是一個好主意,並且可能是首選。

選項 C) 表,用於具有唯一 UserID 作為聚集索引(主鍵)的用戶表,用於具有唯一 InformationID 作為聚集索引(主鍵)的已保存信息類型表,用於具有唯一 UserInformationID 作為聚集索引(主鍵)的 UserInformation 表,列UserID(非聚集索引,用戶表的外鍵)和 InformationID 列(非聚集索引,Information 表的外鍵)。 有一個“值”或類似的列來保存與信息類型相關的數據。

示例:用戶表

UserID UserName
1     | UserName1
2     | UserName2

信息表

InfoID InfoName
1     | FavoriteColor
2     | FavoriteNumber
3     | Birthday

用戶信息表

ID    UserID  InfoID  Value
1     | 1     | 1     | Blue
2     | 1     | 2     | 7
3     | 1     | 3     | '11/01/1999'
4     | 2     | 3     | '05/16/1960'

此方法允許您為任何用戶保存任何值組合,而無需記錄任何未提供的用戶信息。 它使信息表保持“干凈”,因為您不需要為要跟蹤的每條新信息不斷添加列。 只需在 Info 表中添加一條新記錄,然后只記錄提交到 UserInformation 表的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM