2008-11-12 16 views

回答

5

Google針對數據類型的差異。

但架構只是圖片的一部分。

SQL方言也不同。谷歌對於這些差異。然後,要麼堅持SQL的一個通用的子集,要麼建立一個方案,以在每個SQL中使用不同的SQL。

不要等到最後纔對「其他」分貝進行測試。從一開始就進行測試,這樣就不會在死衚衕的設計方向上投入太多。

這裏是一個起點:
http://www.microsoft.com/technet/prodtechnol/sql/2000/deploy/mysql.mspx#EZD
和:
http://troels.arvin.dk/db/rdbms/#insert

4

我四個爲跨數據庫開發這樣的主要原則是:

  1. 不要在名稱中使用空格爲 什麼
  2. 不使用關鍵字無論從DB列名( ORDER,DATE等)
  3. 使用最簡單的列類型(CHAR,INT)。日期和時間戳類型的列差異可能會在某些時候讓你感到不適,所以如果可能的話避免它們(我知道這通常不現實)。
  4. 解除歸一化比您認爲合適的更多。查詢越複雜,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定界符替換代碼的兩個版本。我通常採用更簡單的方法,即不使用關鍵字或空格。

+0

「轉義」在這裏是錯誤的詞。如果你知道我的意思,請隨時編輯我。 – MusiGenesis 2008-11-12 04:46:39

0

一個「有趣」的選擇是根本不寫SQL。建立一個系統,你可以抽象你想要做的規範,然後生成模式/查詢等。我有一個項目,我通過C預處理器構建SQL代碼。

我不會推薦上述任何一種,除非你使用玩高度抽象的代碼。它傾向於作爲一個長槓桿,你真的很努力在短暫的一端,把它移動一點點,併發生巨大的事情。

1

取決於你使用的語言,你可以插入之間-,一個ORM層,如(例如)學說PHP這將有助於你沒有直接寫SQL。就其他評論中的初始架構而言,有許多重要的建議。

0

我在使用數據庫設計使用多重後端時遇到了幾個問題。

首先是數據類型不同,並且有不同的數據處理方式。處理日期和大量文本時,這往往尤其棘手。

我注意到的下一件事是,因爲他們嘗試使用ANSII標準SQL,所以當數據庫不完全支持標準時會出現問題。更大的問題是標準通常不是從特定數據庫獲取數據的最有效方式。我曾經使用過的每個商業數據庫都提供了多個後端,當您在表格中獲得大量記錄時,它們的速度會很慢。 ANSII標準也不能提供解決更復雜問題的好方法,所以最終會出現令人費解的解決方法。

另一種方法是使用存儲過程,併爲您支持的每個數據庫後端編寫一個,但跨數據庫使用相同的名稱。這樣,您可以利用可用於每個數據庫的性能調整和不同的數據庫結構,而無需更改用戶界面,但維護起來要困難得多,因爲必須爲每個數據庫編寫每個更改。但是,對於用戶來說,它可能比競爭對手快得多,因此您可能可以更改產品的溢價。您需要支付額外費用,因爲需要額外的維護成本和額外的數據庫專家,因此您需要手動調整每種類型的數據庫的性能(mysql專家可能不知道如何最佳調整SQL Server數據庫反之亦然)

另一種可以考慮的方法是,您託管數據,並且用戶可以通過網絡訪問數據。那麼你只需要設計和支持你選擇的一個數據庫。您需要一大堆服務器,網絡和dba人員才能這樣做,因爲您需要爲每個客戶端維持基本24小時的正常運行時間,他們可能會要求您將數據存儲在不包含競爭對手數據的服務器上。不知道你正在開發軟件的業務,很難說這是否是一個可行的選擇。

最便宜的路線是需要特定的後端。儘管如此,您可能會失去不想購買不同後端的潛在客戶。如果你這樣做,我會調查潛在客戶以找到他們現在使用的數據庫,這可能是一個事實上的行業標準,你將失去很少的潛在客戶,因爲它需要它作爲後端。此外,如果您可以讓產品的銷售點比競爭對手快得多,因爲您擁有標準後端,那麼您或許可以說服他們。但是如果你走這條路,你最好設計一個速度非常快的數據庫。

0

設計一個邏輯數據庫,它是SQL特有的,但與SQL方言無關。設計應該包括表格,欄目,領域和約束。約束包括但不限於主鍵約束和外鍵約束。

根據不贊成使用一種SQL方言而非另一種方式來定義域規範將會非常棘手。

爲符合邏輯設計的每個後端創建物理設計,並使用特定後端的功能。

在應用程序中,儘可能使用最低公分母SQL,而不會對性能或代碼靈活性造成太大的損失。必要時,在後端特定方法中進行編碼。在幾個對象中隱藏這些後端依賴關係。使大多數應用程序DBMS不可知。

0

Datanamic的DeZign for Databases支持與數據庫無關的建模。

1

Mysql提供導出功能,可讓您將架構導出爲SQL Server兼容格式。

如前所述,儘可能使用simpliest類型,而不要依賴標準SQL。

相關問題