2012-01-07 96 views
0

如果我有食品項目的列表,每一個「的課程領域」,它是有意義的文本(「主菜」)進入的過程中,或者我會得到更好的服務創建一個課程表,然後使用外鍵參考?這是課程和食物之間的一對多關係,但食物和課程之間的一對一關係是正確的?MySQL的優化表結構

感謝您的任何建議。

+0

你對「食物」的定義是什麼?你對「課程」的定義是什麼? – 2012-01-07 05:06:03

+0

「這是食物和食物之間的一對多關係,但食物和食物之間是一對一的關係」這是一個令人困惑的說法。 – 2012-01-07 05:18:27

回答

1

我曾經爲所有東西創建單獨的表格,但有時它比它的價值更麻煩。所以這取決於你的維護。如果你將要改變這些值,並且不希望要做一個巨大的,例如:如果你需要更改值

UPDATE tblFood SET course = 'Main Entree' WHERE course = 'Entree' 

,那麼也許一個外部表是不是一個壞主意。問題出現在你需要查詢數據庫時......你需要內部或外部連接其他表。

DBA曾告訴我MSSQL在索引文本/ varchar值方面做了一件糟糕的工作,所以這就是爲什麼外部表方法誕生了......不知道我是否完全相信這一點,但同時他說MySQL在這方面做了更好的工作,並使查詢更容易。

我敢肯定你會看到10個不同的原因,10個不同的答案,爲什麼你應該或不應該使用一個外部表,但很多時候它歸結爲您的特定需求是什麼。希望這個對你有幫助。

+0

換句話說,查詢信息有點困難,因爲您必須使用JOIN語句,但更容易更新? – Apollo 2012-01-07 17:37:36

+0

確切地說,因爲你很可能有一個整數或一個唯一的ID代表課程價值與價值本身。如果你認爲tblCourse會有課程的名稱加上可能是一個活躍的標誌字段,也許是一個命令優先級(所以你可以訂購課程),那麼額外的表格可能是一種方式。如果在不久的將來它只是一個值而沒有額外的字段,那麼更新可能是一個挑戰,但是如果你對更新語句感到滿意,在做這樣的更新之前做好系統備份,那麼你應該對單表方法。 – 2012-01-09 04:07:21

0

我堅持1:M的課程和食物。如果是這種情況,我會爲課程創建一個單獨的表格,併爲食物分開表格,並將course_id用作食物表上的外鍵。

無論如何,作爲一個字符串進入課程仍然可以工作,但問題是,當你要做一個特定課程的更新,你仍然會去每個食品項目有該課程來更新它,有時一些餐館可能最終會改變他們的課程可以是添加,編輯或刪除課程。 :)