2014-05-06 501 views
0
TABLE presentation { 
    id BIGINT 
    unique_id BIGINT 
    name VARCHAR (128) 
    description VARCHAR (256) 
    updated_at TIMESTAMP 
    created_at TIMESTAMP 
} 

我正在創建一個允許用戶創建演示文稿的應用程序。每個演示文稿都包含在一個佈局中,每個佈局包含多個位置,每個位置都由一個資源(文本,圖像,視頻)佔據。組織數據庫結構

我想弄清楚在演示文稿,佈局和資產之間建立連接的最佳方法。

最初,我在考慮爲presentations,layouts,positionsassets設置一個表格。我顯然需要這個模式是靈活的,所以我可以添加幾個新的layouts與不同數量的職位。

我可以創造我presentation表像這樣:

TABLE presentation { 
    id BIGINT 
    unique_id BIGINT 
    name VARCHAR (128) 
    description VARCHAR (256) 
    position1 (BIGINT) - would contain an asset_id 
    position2 (BIGINT) - would contain an asset_id 
    position3 (BIGINT) - would contain an asset_id 
    position4 (BIGINT) - would contain an asset_id 
    updated_at TIMESTAMP 
    created_at TIMESTAMP 
} 

但是,這是非常短視的,只允許在演示文稿中4名總持倉......但我會在我的方式做大現在更壞的東西。

或者說,我以某種方式使presentationslayoutspositionsassets之間的連接將允許完全的靈活性......,這就是我試圖得到一些幫助。

我不太清楚,如果我在想這個,或者不是......底線是我真的不知道如何在這些模型之間建立適當的連接。

+0

您是否已經設置你的模型和關係雄辯? – sidneydobber

+0

你能指定你的模型應該如何與海誓山盟聯繫嗎?如在演示文稿中可以有許多佈局,佈局可以有很多位置等。 – sidneydobber

回答

1

在您的示例中的結構將適用於一個子表是這樣的:

TABLE presentation_position { 
    presentation_id (BIGINT) 
    position (INT) 
    asset_id (BIGINT) 
} 

您可以通過id列加入這個以呈現(或UNIQUE_ID)或presentation_id只是查詢得到的序列按位置順序的asset_id值。喜歡的東西:

select position, asset_id from presentation_position where presentation_id = 555 order by position 

編輯:

我得到你的企圖更好地瞭解您的其他意見。我想你只是想要一個結構來保持資產的頁面位置。例如:

TABLE presentation_element { 
    presentation_id (BIGINT) 
    sequence (INT) 
    xpos (INT) 
    ypos (INT) 
    asset_id (BIGINT) 
} 

您還可以根據需要爲框高度,寬度等添加列。 presentation_id和sequence列應該是唯一鍵。所以presetation 101將不得不像行:

101 1 100 100 19  //place asset 19 at 100,100 
101 2 255 20 102 //place asset 102 at 255,20 
+0

我想要能夠查詢演示文稿,並在該對象內,能夠循環或提取每個資產的適當位置。 – dcolumbus

+0

啊,你在使用「位置」就像我在我的答案中使用「順序」。我會更新一下... – bitfiddler

+0

那麼你的例子渲染'佈局'沒用?我絕不意味着我最初的想法是正確的路要走......我只需要創建這種關係,以便它具有可擴展性。 – dcolumbus

0

回答正在進行

*還有很多工作要做,但需要從作者更多的輸入

你打算結構對我來說還不是很清楚,但是當你首先設置你的實現時,你會在開始考慮數據庫列之前有一種草圖。

如果您使用的雄辯會是這個樣子:

用戶

class User extends Eloquent { 

    protected $table = 'users'; 

    public function presentations() { 
     return $this->hasMany('Presentation'); 
    } 

} 

介紹

class Presentation extends Eloquent { 

    protected $table = 'presentations'; 

    public function user() { 
     return $this->belongsTo('User'); 
    } 

} 

佈局

class Layout extends Eloquent { 

    protected $table = 'layouts'; 

    public function positions() { 
     return $this->hasMany('Position'); 
    } 

} 

位置

class Layout extends Eloquent { 

    protected $table = 'positions'; 

    public function layout() { 
     return $this->belongsTo('Layout'); 
    } 

} 

資產

class Asset extends Eloquent { 

    protected $table = 'assets'; 

    public function layout() { 
     return $this->belongsTo('Layout'); 
    } 

} 
+0

是的,我只是不知道我最初的想法是否是最好的方法。我使用雄辯,所以謝謝你去那個角度。另一個問題是,目前,我的資產都在各自的表格中(圖片,視頻,文本)。 – dcolumbus

+0

我不認爲這是一個問題。如果你知道你想要走哪條路,就留言吧。我喜歡做這種東西! :) – sidneydobber

+0

我想我想讓我的資產保存在各自的表格(文本,圖片,視頻)中。但我不認爲我想爲佈局和佈局額外的表格和模型而煩惱......這看起來非常多餘,我甚至不知道「職位」表中的信息是什麼。因此,如果以某種方式連接資產和他們在演示文稿中的位置(無論是否具有佈局),我不確定。思考? – dcolumbus