2010-08-01 155 views
5

對於大多數主要網站,您可以進行CRUD操作嗎?每個用戶都有自己的數據庫表嗎?我很想看到一個數據庫結構的例子,其中有多個用戶,我正在查看我的wordpress數據庫結構,並且無法瞭解twitter,tumblr甚至是stackoverflow如何運行數據庫。動態地爲用戶創建表格很容易嗎?提前致謝。每個用戶都有自己的數據庫表嗎?

+2

在解決動態表創建之前,我會尋找其他解決方案 – 2010-08-01 05:02:38

回答

5

爲什麼每個用戶都有自己的表?用戶應該只是一個表中的條目。然後,您使用該用戶的ID來查找其他表中的其他記錄。

如果您的數據庫包含sy 6表,那麼每次添加一個用戶時,您也必須再次添加其他表。

所以現在你有10個用戶和60個表。

+1

現在考慮必須連接到特定用戶的正確表... :) – 2010-08-01 05:54:43

+0

哎呀!是什麼噩夢 – griegs 2010-08-01 05:59:26

2

有多種不同類型的數據庫,但通常不是。更常見的情況是,您將擁有一張表,但具有指定用戶標識的字段。在MySQL中,您可以選擇用戶標識符與特定值匹配的行的子集,這就像動態創建每個用戶表一樣。

+0

實體 - 屬性 - 值(EAV)表通常令人討厭 - 性能差,但可能是適應功能要求的必要罪惡。 – 2010-08-01 05:56:06

+0

@OMG,EAV如何發揮作用?根據數據類型您有不同的表格,但是您可以通過字段將條目鏈接到用戶。我不確定這與EAV有什麼關係。 – 2010-08-01 06:02:45

1

對於每個用戶,不需要單獨的表格。但是可能會有一些涉及數據庫的優化。

用戶實際上代表單行表的行。關於用戶,可以有其他表格用於特定目的。假設「評論」表包含用戶的評論,並且該表可以具有來自用戶的多個評論。然後,該用戶表與評論表具有一對多關係。

我在這裏看到的一些優化是創建視圖(Certin情況下的物化視圖),基於查詢使用的列索引,甚至基於日期/用戶的表的分區或其他相關的應用標準。

+0

物化視圖是臭名昭着的不適應;表分區是您必須支付的一項功能(僅在SQL Server的企業版/開發版中提供,不知道關於Oracle ...)。這兩個概念都超出了OP的要求。 – 2010-08-01 05:58:01

3

您的問題的答案是「否」。通常這些網站所做的是爲用戶提供一個表,其中表的鍵是整數ID字段,屬性是用戶的屬性(例如名稱,屏幕名稱,密碼等)。在SQLite中,它看起來像這樣:

create table User (id integer, email string); 

然後你有兩個表,比如blog_posts和comments。每個表格都包含所有用戶的博客文章和評論。爲了識別用戶,有一個「user_id」字段,該字段標識該表中的行屬於特定用戶。

create table BlogPosts (id integer, description text, user_id integer); 
create table Comments (id integer, description test, blogpost_id integer, user_id integer); 

其他數據庫的語法相似。 「user_id」將博客文章關聯到用戶,並將評論發佈給用戶。 blogpost_id將博客帖子關聯到用戶。即您可以將每個用戶與他的所有問題和評論相關聯。

您可以爲每個用戶創建一個表,但必須具有哪個用戶連接到哪個數據庫的映射,並且您需要始終爲每個用戶打開數據庫的新連接。

0

您無法安全地執行此操作,因爲參數化查詢無法將表名作爲參數。

相關問題