Mysql 疯狂的数据库结构-建议
我正在从事一个项目,我需要在4个模型之间创建三个多对多关系。事情是这样的:Mysql 疯狂的数据库结构-建议,mysql,sql,database,laravel,Mysql,Sql,Database,Laravel,我正在从事一个项目,我需要在4个模型之间创建三个多对多关系。事情是这样的: FAQ类别可以有许多FAQ子类别,反之亦然 FAQ组可以有许多FAQ子类别,反之亦然 常见问题解答可以有许多常见问题解答组,反之亦然 对于所有的数据库专家来说,我应该如何在Laravel中设计这个数据库模式?我应该有三个不同的透视表吗?我应该使用多态关系吗 我以前使用过多态关系,但是在这个场景中我很难实现它 一个问题是FAQ类别和子类别是否应该是不同的表。也许应该是同一张表,以便让你在未来有更多的水平选择 i、 e
- FAQ类别可以有许多FAQ子类别,反之亦然
- FAQ组可以有许多FAQ子类别,反之亦然
- 常见问题解答可以有许多常见问题解答组,反之亦然
我以前使用过多态关系,但是在这个场景中我很难实现它 一个问题是FAQ类别和子类别是否应该是不同的表。也许应该是同一张表,以便让你在未来有更多的水平选择 i、 e
那么,在我看来,您只需要不同的透视表。我看不出有任何理由使用多态关系。我会这样做: 常见问题分类表
Schema::create('faq_categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::table('faq_categories', function (Blueprint $table) {
$table->unsignedInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('faq_categories')->onDelete('cascade');
});
Schema::create('faq_groups', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::create('faqs', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
常见问题组表
Schema::create('faq_categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::table('faq_categories', function (Blueprint $table) {
$table->unsignedInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('faq_categories')->onDelete('cascade');
});
Schema::create('faq_groups', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::create('faqs', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
常见问题表
Schema::create('faq_categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::table('faq_categories', function (Blueprint $table) {
$table->unsignedInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('faq_categories')->onDelete('cascade');
});
Schema::create('faq_groups', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
Schema::create('faqs', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
正如您所看到的,我不会创建FAQ子类别表,因为让类别表引用自己到父类别(使外键可以为null以创建顶级类别也很重要)更干净
现在要设置表之间的关系,我们可以执行以下操作:
常见问题分类-常见问题组(多对多)
常见问题-常见问题组(多对多)
我应该使用多态关系吗
我认为多态关系在这种情况下没有任何意义。我会坚持标准的多对多
在模型类中,应设置所有关系,如中引用的关系
您可以这样做:
常见问题解答类别模型
class FaqCategory extends Model
{
/**
* Get the category's parent category.
*/
public function parent()
{
return $this->belongsTo('App\FaqCategory');
}
/**
* Get the category's sub categories.
*/
public function sub_categories()
{
return $this->hasMany('App\FaqCategory', 'parent_id');
}
/**
* Get the category's faq groups.
*/
public function faq_groups()
{
return $this->belongsToMany('App\FaqGroup');
}
}
class FaqGroup extends Model
{
/**
* Get the group's faq categories.
*/
public function faq_categories()
{
return $this->belongsToMany('App\FaqCategory');
}
/**
* Get the group's faqs.
*/
public function faqs()
{
return $this->belongsToMany('App\Faq');
}
}
class Faq extends Model
{
/**
* Get the faq's faq groups.
*/
public function faq_groups()
{
return $this->belongsToMany('App\FaqGroup');
}
}
常见问题解答组模型
class FaqCategory extends Model
{
/**
* Get the category's parent category.
*/
public function parent()
{
return $this->belongsTo('App\FaqCategory');
}
/**
* Get the category's sub categories.
*/
public function sub_categories()
{
return $this->hasMany('App\FaqCategory', 'parent_id');
}
/**
* Get the category's faq groups.
*/
public function faq_groups()
{
return $this->belongsToMany('App\FaqGroup');
}
}
class FaqGroup extends Model
{
/**
* Get the group's faq categories.
*/
public function faq_categories()
{
return $this->belongsToMany('App\FaqCategory');
}
/**
* Get the group's faqs.
*/
public function faqs()
{
return $this->belongsToMany('App\Faq');
}
}
class Faq extends Model
{
/**
* Get the faq's faq groups.
*/
public function faq_groups()
{
return $this->belongsToMany('App\FaqGroup');
}
}
常见问题解答模型
class FaqCategory extends Model
{
/**
* Get the category's parent category.
*/
public function parent()
{
return $this->belongsTo('App\FaqCategory');
}
/**
* Get the category's sub categories.
*/
public function sub_categories()
{
return $this->hasMany('App\FaqCategory', 'parent_id');
}
/**
* Get the category's faq groups.
*/
public function faq_groups()
{
return $this->belongsToMany('App\FaqGroup');
}
}
class FaqGroup extends Model
{
/**
* Get the group's faq categories.
*/
public function faq_categories()
{
return $this->belongsToMany('App\FaqCategory');
}
/**
* Get the group's faqs.
*/
public function faqs()
{
return $this->belongsToMany('App\Faq');
}
}
class Faq extends Model
{
/**
* Get the faq's faq groups.
*/
public function faq_groups()
{
return $this->belongsToMany('App\FaqGroup');
}
}
谢谢你的详细解释。我会尝试你的解决方案,并让你知道。我感谢你的帮助。