2012-05-02 52 views
1

我的網站要求用戶輸入大量的數學和科學記數法。當然,我需要一種方式來存儲這個服務器端以供將來使用。這是我的理想行動方式:用戶輸入一大塊文本,可能帶有或不帶數學符號,輸入被提交,然後轉換成適合數據庫的格式,最後,在隨後每次查看輸入的數學,它應該被轉換成MathML。 MathML被MathJax轉換爲可讀格式。如何將用戶創建的符號數學存儲在數據庫中?

我從來沒有將數學存儲在數據庫中,而且我希望允許用戶能夠在文本中插入數學的事實會產生一些影響。有任何想法嗎?

+0

你可以只存儲MathML嗎? –

+1

我想我可以,但我不希望在數據庫中存儲標記。這是如何在一些網站的生產中完成的? – JayD3e

+0

我不知道,我沒有在數據庫中存儲符號數學。 –

回答

2

規範化這種事情的願望是可以理解的。這也是錯誤的。

爲了使用關係數據庫,您應該「擴展」爲更多語義類型的唯一方法是出現在where子句中的任何內容。

如果它是合理的爲你想運行一個查詢,看起來像(僞代碼:)

SELECT * FROM FORMULAE 
WHERE "/theta" in free_vars(FORMULAE.FORMULA) 
AND "bob" in FORMULAE.USERS; 

然後,你要使用,使得這樣的查詢效率的數據類型。另一方面,如果數據庫不會對存儲的公式進行任何類型的處理,則不要嘗試將其轉換爲除最有用的外部表示(即正確表示公式的標記)之外的任何其他數據。

0

將MathML存儲爲文本。如果它不適合VARCHAR,那麼使用CLOB

+0

我猜我的評論仍然存在,人們是否真的在數據庫中存儲Markup?如果是這樣,他們是否以某種方式解析方程,並將它們存儲在一個單獨的表中? B/c我不希望在數據庫中有大量的文本與MathMl混合,但是如果這是實現它的唯一方法,那麼我想。 – JayD3e

+0

你可以在[meta.math.stackexchange.com/](http://meta.math.stackexchange.com/)詢問他們是如何做到的。 –

0

我建議將它作爲MathML文本存儲在數據庫中。這樣,在插入時,您將其轉換爲MathML一次,然後每次訪問它時,都不需要進行轉換(即:更快)。

+0

對,但用戶在數據庫中編輯數據後該如何編輯?轉換回ascii? – JayD3e

+0

哦!您的原始文章沒有提到編輯公式的任何內容,您只提到「後續查看」。 – Jarvis

相關問題