Sql-Server

儲存可能是多種不同類型的值的正確方法

  • October 28, 2018

我有一個答案表和一個問題表。

Answers 表有一個值,但根據問題,該值可能是 a bitnvarcharnumber(到目前為止)。問題有一個關於其預期答案值類型應該是什麼的概念。

在某一點或另一個點解析這些答案值很重要,因為至少需要比較這些數字。

對於更多的上下文,問題和可能的答案(通常是允許文本框類型輸入的數據類型)是由一些使用者在各種調查中提供的。然後由其他指定使用者提供答案。

我考慮過的幾個選項是:

A. 根據預期類型(在問題中跟踪)不同解析的 XML 或字元串

B. 三個單獨的表,它們引用(或被引用)Answer 表並根據預期類型連接到。在這種情況下,我不確定設置約束以確保每個問題只有一個答案的最佳方法,或者是否應該留給應用程序。

C. Answer 表上的三個單獨的列,可以根據預期的類型進行檢索。

我很樂意就這些方法的優缺點或我沒有考慮過的替代方法獲得一些意見。

這實際上取決於您的前端如何訪問數據。

如果您使用的是 O/R-mapper,請關注類的物件導向設計,而不是數據庫設計。然後數據庫只是反映類設計。確切的數據庫設計取決於您使用的 O/R 映射器和繼承映射模型。

如果您通過記錄集、數據表、數據讀取器等直接訪問表,那麼簡單的事情就是使用不變的文化將值轉換為字元串並將其儲存在簡單的文本列中. 當然,為了在讀取值時將文本轉換回專門的值類型,再次使用相同的文化。

或者,您可以為每個值類型使用一列。我們今天有 TB 驅動器!

XML 列是可能的,但與簡單的文本列相比可能會增加更多的複雜性,並且做幾乎相同的事情,即序列化/反序列化。

分離的連接表是正確的規範化做事方式;但是,它們也增加了相當多的複雜性。

把事情簡單化。

另請參閱問卷數據庫設計的回答 - 哪種方式更好?.

引用自:https://dba.stackexchange.com/questions/109293