2017-08-15 52 views
0

比方說,我有一個應用程序,在這裏用戶可以寫在語言的故事。數據庫:一個或兩個表格,有什麼更好的方法?

當用戶選擇的語言,可以有兩種情況:

  1. 用戶選擇從保存在一個表中的支持/官方語言的語言。
  2. 語言用戶想選擇不在該表中。所以用戶創建一個自定義語言。

我的問題是:我在哪裏保存這些自定義的語言嗎?我應該用「支持的語言」將它們放在表格中嗎?還是創建一個單獨的表格?

我一直在思考以下參數:

獨立的表:

  • 臨:由於定製的語言只適用於創建者和支持的可用語言給所有用戶,我搜索更經常用於支持的語言。如果只有支持語言的表格,那麼與支持和自定義語言只有一個表格相比,我需要的時間更少。
  • 專業:可能有更多的自定義語言比支持的語言,因爲各種用戶可能會創建相同的自定義語言(這實際上是一個親參數?)
  • Con:在其他表e。 G。故事表我需要保存語言,然後我需要兩列:一列使用語言ID,另一列告訴它是自定義語言還是支持語言。

一個表:

  • 弊:我需要一個額外的列保存,如果該語言正式支持或定製

由於I'me很新的數據庫設計,我不能決定,所以我問你:有什麼更好的方法?

+4

同桌,和指示字段的說,如果語言支持與否。語言實體在這兩種情況下都起到相同的作用。當你決定支持一種流行的語言時,從現在開始的兩年會發生什麼?你必須移動數據並調整連接。通過保持它在同一個實體中;你只是改變數據。 – xQbert

+0

@xQbert謝謝,你能解釋一下嗎? :D – red1575

+4

在關係數據庫設計中,包含相同實體信息的數據應該存儲在同一個表中。我們必須考慮該數據對其他數據的基數,以及它是否屬於相同類型的數據。如果是,那麼爲什麼你會想要在2個不同的表中有兩個具有相同含義的實體?你喜歡更難加入?更多的代碼?或者可能是一種不同的方法,涉及語言概要表和語言類型表,告訴我支持哪種語言,如果您知道語言可能需要多種屬性。 – xQbert

回答

2

首先:你的問題可能會關閉,因爲(我認爲)沒有技術上正確的答案,只有不同的作者可以告訴你他們的個人意見作爲一個答案。所以你的問題主要是基於意見的。

留在那:我認爲將是一個表中的額外列。這將允許您快速理清,它也將(我認爲更重要)允許用戶定期選擇自定義語言,如果它已經存在(如果你不通過只顯示到非自定義語言阻止它用戶)。這將最終減少重複的自定義語言。

1

創建一個單獨的表。比任何空間限制,你應該擔心數據的一致性。確保你的數據庫是正常化的。這在很多方面都很重要。

分析

讓我們假設你的應用程序成爲病毒並有大量插入的事情。由於不需要通用數據,在將來的某個時間,您可能想要修改表格以僅存儲用戶的最近/實時/當前記錄。如果你只有一個表,你會真正結束過寫了很多原始值(都說,如果你想查詢 - 什麼一直是最常見的自定義的語言 - 它會無法使用,因爲原始記錄現在已經失傳)。

性能

不同的表會給你安排可能讀來最優化數據的選項/寫即您選擇索引的方式。將大量數據保存在一張表中可能會影響您的決定。

樂百氏/模塊化

如果您有自定義語言單獨的表,你就可以改變該表根據自己的需要。隨着您的成長,可能會出現一個要求,即將多個列作爲屬性插入。因爲它有可能使系統滯後(如果你只有一張桌子並且把所有東西都放在那裏,這會變得更加突出),因此改變大量桌子並不可取。比方說,我開發了一個API來爲您的自定義語言提供某種支持。您可能需要將我的標識符添加爲記錄。只改變一個只有相關數據的表格,而不是改變具有通用數據集的單個表格總是更容易,在任何情況下這都是不可取的。

要讓這種方法能夠很好地工作,你需要設計文檔插入過程中,說明所有的約束,其中NULL將被允許的屬性,您將如何管理一個一對多的關係(這將需要實施外鍵)等等...

1

我可能會使用一個單一的「語言」參考表。

  1. 你必須積累很多很多,語言你將能夠觀察到任何性能影響之前。
  2. 您的模式會更簡單
  3. 「語言類型」查詢列可以實際存儲數字,您可以索引和優化該字段上的任何查詢。

請讓我們知道您的想法!

+0

謝謝你,你能解釋一下我是怎麼做到的,或者我可以在這裏讀到一些有關這方面的知識:「」語言類型「查詢專欄實際上可以存儲數字,你可以索引和優化該領域的任何查詢。」 – red1575

+0

搜索特定於您正在使用的數據庫(mySQL,Oracle,SQL Server等)的Web或書籍,特別是瞭解索引。 – CarCrazyBen

+0

您可以添加一個名爲「language_type」的列,然後使用1作爲「supported」,使用2作爲「custom」(僅舉例)。索引此欄。然後,在查詢支持語言時,您可以在Where子句中包含「language_type = 1」。 嘗試瞭解更多關於您選擇的數據庫以及如何索引列..... – CarCrazyBen

相關問題