2013-04-17 64 views
4

首先,我知道在stackoverflow上討論herehere的問題。但是這種情況可能會有所不同。數據庫設計麻煩。每個用戶的表格

讓我解釋一下這種情況:

老闆叫我和我的同事開發一個Web應用程序,在那裏他可以增加客戶(讀公司,現在的形式對「用戶」)。
每個用戶在應用程序中都有自己的專用部分,他可以管理他的庫存/結算/付款/訂單/ ...他們甚至可以選擇爲他們的私人提供不同的模塊/菜單項/視圖/ ..部分。
我們的老闆必須能夠通過檢查主控部分中的選項來添加/刪除一些模塊/視圖/ ..
依此類推......

我首先想到的是每個用戶都有一個主模塊。這個想法被我的同事拋棄了。他認爲這太過分了。
但是,當我們開始設計數據庫時,他說他想爲每個用戶在數據庫中擁有大多數表格......
我知道這是不好的做法並試圖解釋。 但他表示,如果我們將所有內容都保存在同一張表中,那將是不安全的。 (如果我們被黑客攻擊,他們不僅會有一家公司的數據,但來自所有公司的數據
討論需要一段時間,最終他的'''''''甚至讓我們的老闆相信他的方法。

由於我這裏是新來的傢伙,我不喜歡站在這家公司沒有肯定知道如果his statement === false

所以,我會愛你的這個意見。

  • 如何安全
  • 如何個性化每家公司
  • 如何管理數據庫
  • 是否有任何人誰也有類似的項目
  • 如何使用不同的「模塊」爲每公司(在我的第一個想法)
  • ...(實際上所有的信息說服他們都很好,但我覺得我必須來與一個很好的選擇)

在此先感謝

+0

那麼讓我明白一點,每個用戶都應該得到自己的一對相等的表來存儲它的數據,這些數據通常可以存儲在表中,並且每行都可以存儲一個用戶ID。 – dbf

+2

我不明白爲什麼用更多的表格更安全。如果你受到黑客攻擊,整個數據庫都可用於黑客與每個桌面。這對我來說似乎沒有意義。 – complex857

+0

對我來說,聽起來像是保持噩夢......每一個小小的變化都必須應用到每一個用戶表。我不知道安全問題,但我想如果有人能夠妥協一張桌子,他也可能會妥協整個數據庫。從數據庫設計角度來看,這聽起來錯了。安全性不應該在DB設計層面上(如此之大)。確保與數據庫的安全通信取決於應用程序級別。 – Quasdunk

回答

6

這在一定程度上個人oppinion的問題。但有些事情不是很好的做法。所以這裏是我對這些觀點的看法:

在同一個表中有多個「用戶」根本不應該是安全風險。

  • 如果有人有權訪問你的數據庫,他擁有所有的數據,不管存儲在哪裏。
  • 您的應用必須通過篩選和驗證的WHERE條件來確保用戶無論如何都只能訪問其行,否則您的應用將在其他級別的SQL注入中遇到嚴重的安全問題
  • 如果每個用戶有一張表,在將應用擴展到新用戶,管理舊用戶或將其刪除時,您將遇到很多麻煩。
  • 如果您需要從多個用戶收集數據,性能將會非常差
  • 根據許多因素,大多數DB中有最大數量的表。我不知道你將有多少用戶存儲,但保持這種一記

用戶分隔條件的到自己的表中的解決方案聽起來像你跳過,奠定堅實和安全的數據模型所需要的時間。這通常會在後期開發或維護應用程序時導致很多問題。我強烈反對這個建議。

經驗法則應該是每個對象類型使用一個表格,而不是每個對象實體。

+0

感謝您對此的看法。如果您需要爲某些「用戶」添加字段,那麼情況如何。由於這是我的同事所關心的問題,所以我想知道如何爲該解決方案提供 – Brainfeeder

+1

@Brainfeeder如果您想爲每個用戶提供不同的字段/選項/條目,或者您只是想提供這樣做的可能性,你應該將這些東西抽象爲另一個相關的表/數據模型,例如user_table <--> user_options_table – Quasdunk

+1

這也是我的建議。製作一個user_id/key/value表,你可以存儲你想要的任何屬性。這些表格也很容易在幾個特性中搜索到。唯一的缺點是你必須自己樞軸轉動(收集每個用戶的所有屬性),因爲大多數SQL表沒有這方面的方法。 如果您自行調整,請使用PHP而不是數據庫。 PHP的數組功能非常快。 – ToBe