2010-12-11 57 views
7

我正在寫我的第一個Web應用程序,並且我對數據庫瞭解得很多,知道該模式很重要,但還不足以知道如何真正編寫一個好的數據庫。是否應該爲每個用戶在Web應用上創建一個新表?

是否有處理存儲在每個用戶帳戶中的信息的標準協議?我的直覺是有一個表,用於存儲用戶的密鑰和登錄信息,以及表格的句柄(可能是關鍵字?),然後爲每個用戶設置一個表格。

但我想知道是否有圍繞每個用戶的表有性能問題,或者如果這似乎是一個令人難以置信的愚蠢的方式來做到這一點。這似乎應該是一個「解決的問題」,因爲基本上所有的Web應用程序都有用戶帳戶,但我一直無法通過搜索找到任何東西。有沒有「解決」模式的任何資源來存儲各種網絡數據?

+0

我知道這有點古老,但我出於安全原因思考相同的方式。例如防止其他用戶到達除他們之外的其他用戶。 – 2016-03-22 22:26:09

+0

@SalemF所以是的,這樣做有潛在的安全問題,但甚至有更大的安全問題有單獨的表。 簡而言之,你不希望你的web應用程序在運行中創建表。您只需要添加或刪除表中的數據。添加和創建表的權限級別高於添加和刪除行的權限級別。而且您不希望您的網絡應用擁有創建或刪除表格的權限。這就是你最終讓整個數據庫被黑客刪除或複製的方式。還有其他原因,但這是安全原因。 – araneae 2016-05-15 14:58:40

+0

@aranesa你對它的權限級別,如果用戶可以訪問其他原始的他可以訪問其他表格的方式枯萎的方式。但是這個想法是讓用戶只保留在他自己的表上,並且不提供刪除或創建新表的權限。任何黑客獲得控制數據庫的方式,他會做他想做的事 – 2016-05-15 15:30:03

回答

11

通常情況下,您不會爲每個用戶創建一個單獨的表格 - 此解決方案不能很好地擴展。

相反,您通常會將所有用戶的數據放入單個表(或每個數據類型一個表)中,並使用WHERE子句中的條件來確保用戶只能讀/寫自己的數據。

0

是的絕對不是一個好主意。你應該做的是熟悉一些Web應用程序框架,因爲大部分/全部都已經爲你提供了。好的選擇是例如Django

+0

那種需要學習的東西.....我在這裏是因爲我不能使用Django作爲我的應用程序的服務器,完全用mysql和python編寫並需要找出設計數據庫的好方法。 – nsij22 2015-05-23 07:08:20

4

除非你的應用程序是非常自定義的東西,否則你會想要選擇一個web應用程序框架來處理。對於簡單的事情,大多數常見的框架的工作幾乎同樣好(儘管在這方面存在一些狂熱分歧)。我會假設你有一種編程語言,你覺得你是最強壯的,所以我建議你讓它成爲你的Web框架的主要指南。通過語言的一些常見的框架是(這甚至不是一個接近一個詳盡的清單):

至於你對模式的問題,你可能想看看database normalization。大多數框架已經具有處理用戶創建和身份驗證的工具,但通常情況下,您絕不會想要爲每個用戶創建一個表。更常見的方法是創建一個稱爲用戶的表,其中有一些id作爲主鍵,然後用作引用其他數據的外鍵。

相關問題