我想給客戶一個數據庫引擎的選擇,但也想盡量減少我的這種決定的麻煩。
有問題的引擎是MySQL(5或更高版本)和SQL Server(2005或更高版本)。如何設計可以與MySQL和SQL Server一起使用的數據庫模式?
回答
Google針對數據類型的差異。
但架構只是圖片的一部分。
SQL方言也不同。谷歌對於這些差異。然後,要麼堅持SQL的一個通用的子集,要麼建立一個方案,以在每個SQL中使用不同的SQL。
不要等到最後纔對「其他」分貝進行測試。從一開始就進行測試,這樣就不會在死衚衕的設計方向上投入太多。
這裏是一個起點:
http://www.microsoft.com/technet/prodtechnol/sql/2000/deploy/mysql.mspx#EZD
和:
http://troels.arvin.dk/db/rdbms/#insert
我四個爲跨數據庫開發這樣的主要原則是:
- 不要在名稱中使用空格爲 什麼
- 不使用關鍵字無論從DB列名( ORDER,DATE等)
- 使用最簡單的列類型(CHAR,INT)。日期和時間戳類型的列差異可能會在某些時候讓你感到不適,所以如果可能的話避免它們(我知道這通常不現實)。
- 解除歸一化比您認爲合適的更多。查詢越複雜,JOIN-y越有可能最終不得不維護特定於數據庫的配對版本的查詢,以使所有內容在兩個數據庫上均可接受。一旦你在那裏,你註定了。
1和2實際上是同一個問題 - 所有的數據庫允許逃逸對象名稱(這樣你就可以有空間和名稱,如訂單和DATE名稱),但他們通常採取不同的方式,所以此查詢的SQL Server :
SELECT [ORDER], [Why This Name] FROM [Table From Hell]
必須
SELECT "ORDER", "Why This Name" FROM "Table From Hell"
在甲骨文
,然後你有每個查詢或一些尤伯杯janky定界符替換代碼的兩個版本。我通常採用更簡單的方法,即不使用關鍵字或空格。
一個「有趣」的選擇是根本不寫SQL。建立一個系統,你可以抽象你想要做的規範,然後生成模式/查詢等。我有一個項目,我通過C預處理器構建SQL代碼。
我不會推薦上述任何一種,除非你使用像玩高度抽象的代碼。它傾向於作爲一個長槓桿,你真的很努力在短暫的一端,把它移動一點點,併發生巨大的事情。
如果您下載並使用VisioModeler來捕捉您的概念設計和/或邏輯設計,那麼在爲幾個RDBMS的等效物理設計吐出DDL相當不錯。
或者有一些其他的ERD型工具,完成大致相同的事情。你可以試試DBDesigner。
取決於你使用的語言,你可以插入之間-,一個ORM層,如(例如)學說PHP這將有助於你沒有直接寫SQL。就其他評論中的初始架構而言,有許多重要的建議。
我在使用數據庫設計使用多重後端時遇到了幾個問題。
首先是數據類型不同,並且有不同的數據處理方式。處理日期和大量文本時,這往往尤其棘手。
我注意到的下一件事是,因爲他們嘗試使用ANSII標準SQL,所以當數據庫不完全支持標準時會出現問題。更大的問題是標準通常不是從特定數據庫獲取數據的最有效方式。我曾經使用過的每個商業數據庫都提供了多個後端,當您在表格中獲得大量記錄時,它們的速度會很慢。 ANSII標準也不能提供解決更復雜問題的好方法,所以最終會出現令人費解的解決方法。
另一種方法是使用存儲過程,併爲您支持的每個數據庫後端編寫一個,但跨數據庫使用相同的名稱。這樣,您可以利用可用於每個數據庫的性能調整和不同的數據庫結構,而無需更改用戶界面,但維護起來要困難得多,因爲必須爲每個數據庫編寫每個更改。但是,對於用戶來說,它可能比競爭對手快得多,因此您可能可以更改產品的溢價。您需要支付額外費用,因爲需要額外的維護成本和額外的數據庫專家,因此您需要手動調整每種類型的數據庫的性能(mysql專家可能不知道如何最佳調整SQL Server數據庫反之亦然)
另一種可以考慮的方法是,您託管數據,並且用戶可以通過網絡訪問數據。那麼你只需要設計和支持你選擇的一個數據庫。您需要一大堆服務器,網絡和dba人員才能這樣做,因爲您需要爲每個客戶端維持基本24小時的正常運行時間,他們可能會要求您將數據存儲在不包含競爭對手數據的服務器上。不知道你正在開發軟件的業務,很難說這是否是一個可行的選擇。
最便宜的路線是需要特定的後端。儘管如此,您可能會失去不想購買不同後端的潛在客戶。如果你這樣做,我會調查潛在客戶以找到他們現在使用的數據庫,這可能是一個事實上的行業標準,你將失去很少的潛在客戶,因爲它需要它作爲後端。此外,如果您可以讓產品的銷售點比競爭對手快得多,因爲您擁有標準後端,那麼您或許可以說服他們。但是如果你走這條路,你最好設計一個速度非常快的數據庫。
設計一個邏輯數據庫,它是SQL特有的,但與SQL方言無關。設計應該包括表格,欄目,領域和約束。約束包括但不限於主鍵約束和外鍵約束。
根據不贊成使用一種SQL方言而非另一種方式來定義域規範將會非常棘手。
爲符合邏輯設計的每個後端創建物理設計,並使用特定後端的功能。
在應用程序中,儘可能使用最低公分母SQL,而不會對性能或代碼靈活性造成太大的損失。必要時,在後端特定方法中進行編碼。在幾個對象中隱藏這些後端依賴關係。使大多數應用程序DBMS不可知。
Datanamic的DeZign for Databases支持與數據庫無關的建模。
Mysql提供導出功能,可讓您將架構導出爲SQL Server兼容格式。
如前所述,儘可能使用simpliest類型,而不要依賴標準SQL。
- 1. 如何從SQL Server切換到MySQL以便與Excel數據庫一起使用
- 2. 我的數據庫模式可以與Mongo一起使用嗎?
- 3. 設計SQL Server數據庫
- 4. 數據庫設計SQL Server
- 5. SQL Server數據工具可以與SQL Server 2008 SSIS一起使用嗎?
- 6. SQL Server數據庫模式
- 7. 簡單的SQL Server 2008數據庫的數據庫模式設計
- 8. 設計數據庫模式(MySQL)
- 9. 在mysql中設計數據庫模式
- 10. SQL數據庫模式設計
- 11. 如何使SQL Server數據庫設置
- 12. 友好的ORM可以和傳統的數據庫模式一起使用嗎?
- 13. 如何使mysql數據庫模式與h2數據庫兼容
- 14. Reporting Services 2008可以與SQL Server 2005一起用作目錄數據庫嗎?
- 15. 如何設計數據庫模式?
- 16. 如何將PHPUnit的DBUnit與Microsoft SQL Server數據庫一起使用?
- 17. 如何在預覽模式下使用sql server數據庫?
- 18. SQL Server數據庫模式是否可以從.NET類生成
- 19. 設計數據庫模式
- 20. 如何構建與sphinx一起使用的mysql數據庫?
- 21. 存儲庫模式可以與Asp.net webforms一起使用嗎?
- 22. 存儲庫模式可以與webapis一起使用嗎?
- 23. MVC模式和數據庫設計
- 24. Oracle SQL Developer是一個很好的數據庫,可以與c#一起使用
- 25. 是否可以鏡像SQL Server 2008和SQL Server 2008R2數據庫?
- 26. 任何人都可以確認phpMyAdmin AllowNoPassword與MySQL數據庫一起使用嗎?
- 27. 從SQL Server Express生成的數據庫是否可以與主版本的SQL一起使用?
- 28. 如何使用Active Records和nhibernate更新SQL Server數據庫中的模式?
- 29. SQL Server/EF - 數據庫設計
- 30. 設計SQL Server數據庫正確
「轉義」在這裏是錯誤的詞。如果你知道我的意思,請隨時編輯我。 – MusiGenesis 2008-11-12 04:46:39