SQL VIEW是一個全局的邏輯表,可能會或可能不會持久化。但它仍然是一張桌子。因此,VIEW應該始終遵循第一範式(1NF)嗎?即沒有重複的行,只有標量類型,沒有從上到下或從左到右的順序等。那麼更高的標準形式呢?對我來說,我的應用程序'消費'了存儲過程的結果,我的VIEW被SQL消費'消費',並且這兩種用法是相互排斥的(即,我不查詢使用SQL的存儲過程的結果集和我的應用程序不包含SQL代碼)。我已經看到其他人使用VIEW將一列中的多個值連接成一行,通常以逗號分隔的格式。寫作對這樣的列的SQL查詢謂詞需要一個類似的組裝機:SQL VIEW應該總是在1NF中嗎?
',' + concat_col + ',' LIKE '%' + ',' + search_value + ',' + '%'
所以在我看來,合理的預期是可以查詢到僅由標量類型的所有表。我是否過於「純粹」思考?
我的觀點僅由SQL查詢 '消費'。如果我的程序需要「特殊」格式的結果集,那麼我會在存儲過程或中間層中執行此操作。我並不是建議每個存儲過程的輸出都應該在1NF中,只有*表格形式的輸出(我猜那樣會包括適用的表格變量)。 – onedaywhen 2009-06-26 14:11:52
您明顯爲您自己的應用程序創建了規則(例如客戶端沒有SQL),這些規則適用於您。它們更具限制性,我認爲是最佳實踐,但限制性太強的好處在於,以後改變主意總是很容易的,而且會變得更加輕鬆 - 不容易走另一條路。但通常情況下,視圖的輸出可能違反1NF(雖然dupe行無用,AFAIK)。事實上,使用醜陋的視圖是將醜陋的設計遷移到乾淨設計的最佳方式之一 - 您需要視圖來支持傳統客戶端,直到他們也可以修復。 – 2009-06-26 14:48:13