如何在不使用主键的情况下制作外键
How to make a foreign key not using primary key
我在 Laravel 上为 table pasien 进行了这样的迁移:
public function up()
{
Schema::create('pasien', function (Blueprint $table) {
$table->string('No_RM');
$table->timestamps();
$table->primary('No_RM');
});
}
现在我想为 No_RM 创建外键,NOT 为 id
public function up()
{
Schema::create('data_primary', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unique('RM_id');
$table->string('file_primary');
$table->timestamps();
$table->foreign('RM_id')->references('No_RM')->on('pasien');
});
}
仍然有错误
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unsigned not null, file_primary
varchar(255) not null, created_at
timestamp ' at line 1")
有人可以纠正我的错误吗?
概念上你不能将外键引用到非主键,它打破了关系数据库的概念,你能给我 ERD 吗?也许我可以帮助重新设计你的数据库结构
只需添加另一个迁移即可修改您的 pasien
table 喜欢
Schema::table('pasien', function (Blueprint $table) {
$table->unique('RM_id');
});
现在可以在data_primary
、table中声明RM_id
为外键,要成为外键,它应该是唯一键。
如果您放弃了迁移,那么您正在创建新的 tables,您可以像
帕辛table
public function up()
{
Schema::create('pasien', function (Blueprint $table) {
$table->increments('id');
$table->string('No_RM')->unique();
$table->timestamps();
});
}
和data_primarytable
public function up()
{
Schema::create('data_primary', function (Blueprint $table) {
$table->increments('id');
$table->string('RM_id');
$table->string('file_primary');
$table->timestamps();
$table->foreign('RM_id')->references('RM_id')->on('pasien')
->onUpdate('cascade')->onDelete('cascade');
});
}
我在 Laravel 上为 table pasien 进行了这样的迁移:
public function up()
{
Schema::create('pasien', function (Blueprint $table) {
$table->string('No_RM');
$table->timestamps();
$table->primary('No_RM');
});
}
现在我想为 No_RM 创建外键,NOT 为 id
public function up()
{
Schema::create('data_primary', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unique('RM_id');
$table->string('file_primary');
$table->timestamps();
$table->foreign('RM_id')->references('No_RM')->on('pasien');
});
}
仍然有错误
1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'unsigned not null,
file_primary
varchar(255) not null,created_at
timestamp ' at line 1")
有人可以纠正我的错误吗?
概念上你不能将外键引用到非主键,它打破了关系数据库的概念,你能给我 ERD 吗?也许我可以帮助重新设计你的数据库结构
只需添加另一个迁移即可修改您的 pasien
table 喜欢
Schema::table('pasien', function (Blueprint $table) {
$table->unique('RM_id');
});
现在可以在data_primary
、table中声明RM_id
为外键,要成为外键,它应该是唯一键。
如果您放弃了迁移,那么您正在创建新的 tables,您可以像
帕辛table
public function up()
{
Schema::create('pasien', function (Blueprint $table) {
$table->increments('id');
$table->string('No_RM')->unique();
$table->timestamps();
});
}
和data_primarytable
public function up()
{
Schema::create('data_primary', function (Blueprint $table) {
$table->increments('id');
$table->string('RM_id');
$table->string('file_primary');
$table->timestamps();
$table->foreign('RM_id')->references('RM_id')->on('pasien')
->onUpdate('cascade')->onDelete('cascade');
});
}