簡體   English   中英

關系數據庫組織

[英]Relational Databases organization

我正在為一個網站創建CMS,該網站將包含新聞和新聞頁面的不同主題。 因此,我為每個主題(體育,文學等)創建了一張表格,目的是為了擁有一個更干凈,更好的數據庫組織(我認為)。 但是我最近了解了關系數據庫,發現可以用更少的表(僅2個表的主題和內容)和更少的代碼(很好)來完成相同的任務。 但是我擔心的是,由於該網站可能會隨着時間推移而擁有數百頁甚至數千頁,因此在一個表中包含這么多頁面是否安全,整潔並且可以嗎? 知道某天某人可能會入侵該網站並刪除該表,因此我將放松所有帖子。 那么,是否有任何更干凈,更安全的方式來完成此任務,但仍使用關系數據庫的概念?

簡短的回答:是的。 正如JLo在上面的評論中所說,在設計數據庫結構時,您不應該主要考慮安全性。 主要考慮數據存儲的效率(即規范化)。

如果黑客可以進入您的數據庫,那么無論他們可以訪問什么表,這都是一個問題。 因此,就安全性而言,首先應將精力集中在防止注入和數據庫攻擊上。 試圖將數據分成不同的表以保護其免受黑客攻擊,就像將黃金存儲在十個不同的銀行保險庫中以防止銀行搶劫一樣。 這是通過隱秘實現安全 ,它對您的每一步都有害。

相反,就安全性而言:

  • 如果服務器代碼已經編寫,請對其進行安全審核。 專家可以為您指出一些可能導致不必要的數據庫訪問的代碼,並告訴您原因。 我想說,您從審核中獲得的學習經驗比他們提出的實際具體建議更有價值。
  • Google SQL注入並閱讀有關該主題的所有內容。 這項技術是大多數數據庫被黑客入侵的方式,而且至關重要的是,您必須熟悉它的本質,易受攻擊的代碼的外觀以及如何編寫可防止這種攻擊的代碼。
  • 設置出色的冗余數據庫備份系統。 至少2個單獨的存儲在2個不同的位置。 如果黑客拒絕了您的一張桌子,那么它將給您帶來極大的不便,而不是破壞業務。

在規范化數據結構方面:

  • 將形狀相同的數據存儲在同一位置。 因此,只要可以根據表中的同一列來描述/定義所有頁面,請絕對將它們存儲在同一表中。
  • 了解有關MySQL性能和索引的信息。 索引不足/結構不良的數據庫可能會在流量不足和最大表中的百萬行以下時停止運行; 索引良好的行可以處理數十億行。 隨着流量的增加,這個問題會變得更大,因此希望您的預算相應增加,並可以在此方面獲得專家的幫助。 性能問題可能會突然發作,因此值得在它們使您的網站崩潰之前學習很多有關它們的知識。
  • 不要太擔心行數。 這里主要關注的是性能。 往上看。 建立關系數據庫以處理大表; 那是他們的主要用例。 使用基本的索引技術(例如,在每個外鍵列和通常查詢的任何其他列上添加索引(但是主鍵列已經建立了索引,因此它們不需要一個)),您應該能夠使其達到1M- 1000萬行,無重大性能問題。
  • 找到一種方法可以根據實際數據對您的查詢進行基准測試。 某些性能優化是顯而易見的,但俗話說, 過早的優化是萬惡之源 例如,在編寫查詢時,請進行一些基准測試,以了解較少的查詢(較長的/具有更多的JOIN)還是較多的查詢(較小和更快)的性能更高。 通常來說,查詢越少越好,但是在很多情況下,您的應用可能會不同意;-),因此擁有適當的基礎結構可以自己進行測試。 添加索引時也是一樣; 基准測試可以使您對索引對數據庫有什么影響有一個很好的直覺,而直覺是非常有價值的事情。

由於該網站可能會隨着時間推移而擁有數百甚至數千頁,因此在一個表中包含這么多頁是否安全,整潔並且可以嗎?

只要索引正確,就可以在數據庫中存儲數百萬個頁面。

知道某天某人可能會入侵該網站並刪除該表,因此我將放松所有帖子。

在這里使用一千張表沒有什么區別,如果可以刪除一張表,則可以全部刪除。

暫無
暫無

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

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