我正在尝试开发一个艺术作品解决方案,但坚持关于如何将其编码为数据库模式的类别类型问题。我刚开始理解父键和外键的概念。
艺术品属于类别类型,如照片,乐谱,绘画,雕塑。我所做的是为艺术作品创建了一个表,为类别类型创建了一个表,并将外键链接到主要的艺术作品表。如果照片具有特定或独特的信息,如照片格式和照片拍摄日期,该怎么办?为了规范这一点,我们是否需要一个单独的表来容纳照片信息?
如何转换图表架构?请参阅附图的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');
});
}
答案 0 :(得分:1)
如果您刚刚开始理解主键和外键的概念,那么您可能只是开始关系数据库设计。虽然你可以在学习很多案例之前开始学习简单的案例,但还有很多东西需要学习。
您可能希望了解的一个概念是HAS-A关系和IS-A关系之间的区别。 HAS-A关系的一个例子可能是艺术家和艺术作品之间的关系(与您的问题无关)。所有教程中都存在HAS-A关系,可以帮助您快速进行数据库设计。
IS-A关系更加微妙,数据库教程通常不能清楚地表达出来。 IS-A关系的一个例子是照片和艺术品之间的关系。照片是一件艺术品。这通常是一对一的关系,通常是类 - 子类(类型 - 子类型)情况的实例。这就是这种情况。照片,乐谱,绘画,雕塑都是艺术品的子类型。
对于特定技术,我建议您查看这三个标签下分组的信息和问题:
single-table-inheritance class-table-inheritance shared-primary-key