我们如何使用唯一具有每种类型数据的图稿类型处理数据库架构?

时间:2016-08-07 10:32:07

标签: single-table-inheritance class-table-inheritance shared-primary-key

artwork.jpg

我正在尝试开发一个艺术作品解决方案,但坚持关于如何将其编码为数据库模式的类别类型问题。我刚开始理解父键和外键的概念。

艺术品属于类别类型,如照片,乐谱,绘画,雕塑。我所做的是为艺术作品创建了一个表,为类别类型创建了一个表,并将外键链接到主要的艺术作品表。如果照片具有特定或独特的信息,如照片格式和照片拍摄日期,该怎么办?为了规范这一点,我们是否需要一个单独的表来容纳照片信息?

如何转换图表架构?请参阅附图的artwork.jpg。我不仅将艺术作品表链接到类别,每个类别类型还将有一个单独的表格,以带来独特的信息,如照片的照片格式,作​​曲家姓名和乐谱的长度(分钟)。请帮助阐明这一点。谢谢。

 

public function up()
    {
        Schema::create('artwork', function (Blueprint $table) {

           

            $table->increments('id');
            $table->string('title');

            //this is foreign key to the categories table
            $table->integer('category_id')->nullable()->unsigned();
            $table->foreign('category_id')->references('id')
                  ->on('categories')
                  ->onDelete('cascade');
            
            $table->string('author');
            $table->string('groupcountry');
            $table->string('year');
            $table->string('description');
          
        });
    }

=============================

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('category_name');
            $table->string('category_description');
            
        });
    }

1 个答案:

答案 0 :(得分:1)

如果您刚刚开始理解主键和外键的概念,那么您可能只是开始关系数据库设计。虽然你可以在学习很多案例之前开始学习简单的案例,但还有很多东西需要学习。

您可能希望了解的一个概念是HAS-A关系和IS-A关系之间的区别。 HAS-A关系的一个例子可能是艺术家和艺术作品之间的关系(与您的问题无关)。所有教程中都存在HAS-A关系,可以帮助您快速进行数据库设计。

IS-A关系更加微妙,数据库教程通常不能清楚地表达出来。 IS-A关系的一个例子是照片和艺术品之间的关系。照片是一件艺术品。这通常是一对一的关系,通常是类 - 子类(类型 - 子类型)情况的实例。这就是这种情况。照片,乐谱,绘画,雕塑都是艺术品的子类型。

对于特定技术,我建议您查看这三个标签下分组的信息和问题: