Php 组织数据库结构
我正在创建一个允许用户创建演示文稿的应用程序。每个演示文稿都构建在一个布局中,每个布局包含多个位置,每个位置都由一个资源(文本、图像、视频)占据 我正试图找出在我的演示、布局和资产之间建立联系的最佳方式 最初,我想为Php 组织数据库结构,php,mysql,database,laravel-4,eloquent,Php,Mysql,Database,Laravel 4,Eloquent,我正在创建一个允许用户创建演示文稿的应用程序。每个演示文稿都构建在一个布局中,每个布局包含多个位置,每个位置都由一个资源(文本、图像、视频)占据 我正试图找出在我的演示、布局和资产之间建立联系的最佳方式 最初,我想为演示文稿,布局,位置,资产建立一个表格。显然,我需要这个模式是灵活的,因此我可以添加几个新的布局,具有不同数量的位置 我可以这样创建我的演示文稿表: TABLE presentation { id BIGINT unique_id BIGINT name VA
演示文稿
,布局
,位置
,资产
建立一个表格。显然,我需要这个模式是灵活的,因此我可以添加几个新的布局
,具有不同数量的位置
我可以这样创建我的演示文稿表:
TABLE presentation {
id BIGINT
unique_id BIGINT
name VARCHAR (128)
description VARCHAR (256)
updated_at TIMESTAMP
created_at TIMESTAMP
}
但这是非常短视的,在一次演讲中只允许总共4个位置。。。但我现在已经在去更大更坏的地方的路上了
或者,我以某种方式在演示文稿
、布局
、位置
和资产
之间建立了一种联系,从而实现了完全的灵活性。。。这就是我想要得到帮助的地方
我不太确定我是不是想得太多了,还是。。。底线是,我真的不确定如何在这些模型之间建立正确的连接。您示例中的结构适合于类似以下内容的子表:
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
}
TABLE presentation_position {
presentation_id (BIGINT)
position (INT)
asset_id (BIGINT)
}
您可以通过id列(或唯一id)将其连接到presentation,也可以通过presentation id查询,以按位置顺序获取资产id值序列。比如:
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
}
TABLE presentation_position {
presentation_id (BIGINT)
position (INT)
asset_id (BIGINT)
}
编辑:
从你的其他评论中,我对你的意图有了更好的了解。我认为您只需要一个结构来保持资产的页面位置。大概是这样的:
select position, asset_id from presentation_position where presentation_id = 555 order by position
还可以根据需要为框的高度、宽度等添加列。presentation_id和sequence列应该是唯一的键。因此,预设101将有如下行:
TABLE presentation_element {
presentation_id (BIGINT)
sequence (INT)
xpos (INT)
ypos (INT)
asset_id (BIGINT)
}
正在回答问题
*仍有工作要做,但需要作者提供更多的投入
我还不太清楚您的预期结构,但当您首先设置房地产时,在开始考虑数据库列之前,您将有一个草图
如果您使用的是Elount,它将如下所示:
select position, asset_id from presentation_position where presentation_id = 555 order by position
使用者
介绍
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');
}
}
资产
我设想能够查询一个演示文稿,并且在该对象中,能够循环或提取其适当位置的每个资产。啊,您使用的是“位置”,就像我在回答中使用的“序列”。我会更新一点…那么您的示例是否会使布局
无用?我并不是说我最初的想法是正确的。。。我只需要创建这种关系,这样它就可以伸缩。如果你想让版面像模板一样定义可变位置,我想你不需要它们来做演示。它们可以用作元数据来创建新的演示文稿。希望它有助于让球滚动。所以你不认为有必要为位置建立一个模型(这是布局的要点)?相反,只需让用户界面/用户体验决定位置的走向?您是否已经以雄辩的方式设置了您的模型和关系?您是否可以指定您的模型应该如何相互关联?因为在一个演示文稿中可以有很多布局,一个布局可以有很多位置等等。是的,我只是不知道我最初的想法是否是最好的方法。我用的是雄辩,所以谢谢你从这个角度出发。另一个问题是,目前,我的资产都在各自的表(图像、视频、文本)中。我认为这不一定是个问题。如果你知道你想走哪条路,就发表评论吧。我喜欢做这种事!:)我想我希望将我的资产保存在各自的表中(文本、图像、视频)。但是我不想为布局
和位置
的额外表格和模型操心。。。它似乎非常冗余,我甚至不确定位置表中会包含哪些信息。因此,如果在演示文稿中连接资产和它们的位置(无论是否使用布局)有意义,我不确定。思想?