2014-04-28 42 views
-1

我有一個運行許多軟件的系統。 假設系統從0到烹飪完成一個披薩。 它具有以下子系統:SQL - 行是另一個表中的行的組合

  1. RecipeWizard:挑選選定的成分。
  2. 配料攪拌器:將配料塗在麪糰上。
  3. 烤箱:用特定溫度烹飪比薩。

這些子系統都運行一個獨立的軟件,可以獨立升級。 對於每個披薩,我們需要知道我們用來製作它的不同軟件。

CREATE TABLE pizza (
    id_pizza INTEGER NOT NULL PRIMARY KEY NOT NULL, 
    something INTEGER NULL, 
    ..., 
); 

答:

例如,比薩餅N°X使用RecipeWizard V1.0,V2.3 IngredientMixer,烤箱V1.1

我已經做了以下的(簡化的)製成軟件具有屬性。在此表中,可能會出現多次軟件版本或修訂版本。這讓我知道整個系統中放置了哪些軟件。

CREATE TABLE softwareProperties (
    id_softwareProperties INTEGER NOT NULL PRIMARY KEY NOT NULL, 
    name VARCHAR(16) NULL, 
    version INTEGER NULL, 
    revision INTEGER NULL 
); 

修訂(如在SVN版本)軟件的應該是出於測試目的經常變化(每developper每天2-3次)。

最後一個表如下:

CREATE TABLE IF NOT EXISTS softwareVersion (
    id_softwareVersion INTEGER NOT NULL PRIMARY KEY NOT NULL, 
    fk_pizza INTEGER NOT NULL, 
    fk_RecipeWizard INTEGER NOT NULL, 
    fk_IngredientMixer INTEGER NOT NULL, 
    fk_Oven INTEGER NOT NULL, 
    CONSTRAINT c_01_softwareVersion FOREIGN KEY (fk_pizza) REFERENCES pizza (id_pizza) 
    CONSTRAINT c_02_softwareVersion FOREIGN KEY (fk_RecipeWizard) REFERENCES softwareProperties (id_softwareProperties) 
    CONSTRAINT c_03_softwareVersion FOREIGN KEY (fk_IngredientMixer) REFERENCES softwareProperties (id_softwareProperties) 
    CONSTRAINT c_04_softwareVersion FOREIGN KEY (fk_Oven) REFERENCES softwareProperties (id_softwareProperties) 
); 

你有更好的方法來做到這一點,而不是有多個外鍵的? PS:讓我知道你是否找到了更好的問題標題。

+0

我會從PizzaID和SoftwareId之間的多對多關係開始。如果你不知道這意味着什麼,我已經聽說過關於這本書的數據庫設計的好消息。 –

+0

好吧,在發佈問題之前,我正在閱讀** Identifying Relationship **(在MySQL WorkBench中找到它),因爲它似乎與我的需求有關。關於這本書,我希望評論不是諷刺。我沒有時間去閱讀,並不是我不想要。我相信你明白擁有一位「需要爲昨天解決」的老闆是什麼感覺。 _ –

回答

0

我看了很多關係。顯然,我必須刪除softwareVersion表中的所有外鍵。

CREATE TABLE IF NOT EXISTS softwareVersion (
    fk_pizza INTEGER NOT NULL, 
    fk_softwareProperties INTEGER NOT NULL, 
    CONSTRAINT c_01_softwareVersion PRIMARY KEY (fk_pizza, fk_softwareProperties), 
    CONSTRAINT c_02_softwareVersion FOREIGN KEY (fk_pizza) REFERENCES pizza (id_pizza) 
    CONSTRAINT c_03_softwareVersion FOREIGN KEY (fk_softwareProperties) REFERENCES softwareProperties (id_softwareProperties) 
); 

的問題是,對於每一個比薩餅,這個表會存在不同的軟件具有添加儘可能多的行。在這種情況下,每個披薩將會有3排。

因此,理想的情況是在結點表中有1個披薩,1行,這一行將指一組獨特的軟件。 有沒有這樣的設計模式?

相關問題