我還沒有設計過一段時間的數據庫,現在我對我的設計沒有太大的信心。我基本上在數據庫中有三個表格,表示各種歷史記錄。我必須改變這個系統,以便每次添加一個記錄(例如某些事情變成歷史)時,可能需要來自用戶的一些輸入。有時他們只會有一個簡單的問題,有時候他們會被要求提供五種不同的信息,並且這些信息需要由最終用戶通過管理前端進行靈活管理。所以我打算有一個問題表和答案表,用複合表把它們和其他三個表聯繫起來。我在設計答案表時很掙扎,因爲每個問題都可能需要各種答案。一些響應將是通過外鍵綁定到另一個數據庫的下拉選擇。其他可能是文本輸入,日期或是/否答案。現在,我有一個涵蓋所有類型的一系列可空字段的答案的回答表...數據庫設計:靈活的Q&A存儲
+----------------------------+
| Answer |
+----------------------------+
| Id (int) |
| QuestionId (int) |
| ForeignKeyId1* (int) |
| ForeignKeyId2* (int) |
| ForeignKeyId3* (int) |
| Number* (bigint) |
| DateField* (date) |
| Text* (varchar 500) |
| YesNo* (bit) |
+----------------------------+
*Nullable
旁註:這個問題表關係到QuestionType這將決定(在應用程序中)如何驗證用戶輸入。輸入被存儲在應答記錄的適當的可空字段中,其他字段被清除。我認爲這會比沒有數據完整性的catch all varchar answer字段更好。
這是一個糟糕的設計?有什麼可以讓它變得更好?
的ForeignKeyId字段的答案,用戶會從下拉列表挑選。他們綁在其他桌子上。感謝您的反饋:) – 2011-05-18 19:32:45
好的。不是要告訴你想要做什麼,但是你是否考慮製作另一個答案ID和問題ID表。這樣你就可以得到儘可能多的有效答案。目前,如果您想爲任何問題添加另一個有效答案,就會遇到問題。只是一個建議:)希望一切順利。 – 2011-05-18 19:41:46
已經有這樣的實施,但它不是真的與手頭上的問題相關;) – 2011-05-18 21:40:11