在 Laravel 迁移中决定唯一、主要或增量
Deciding between unique, primary, or increments in Laravel Migrations
我有一个 table 的数据,其中主要的唯一元素称为 CRN
,表示 "course registration number",它是一个整数值。
在这个 table 中有大约 4000 个 class,每个 class 都有一个唯一的 CRN。
我的问题是,在我的迁移架构构建器中,我应该将 CRN
设置为唯一、主要还是增量?
根据我的用法,unique 最有意义。
CRN 确实是独一无二的,永远不会改变。我有一个脚本可以更新与此 CRN 对应的其他列,并且将 CRN 设置为唯一将防止创建相同 CRN 的其他行。
我 运行 在没有设置 unique/primary/increments 的任何这些约束的情况下遇到的一个错误是,当我重新 运行 我的更新注册号码的脚本时,例如,对于CRN,生成一个新行而不是更新它。所以现在我有同一个 CRN 的两行数据。
İ如果您的密钥 CRN 是代理密钥,那么您应该使它成为唯一的、主要的和递增的,因为它是代理密钥并且对您的 object.If 没有任何意义,它是自然密钥,因此您不必制作它增加只是让它独一无二。
如果它是代理项,则使用 $table->increments('id'
) 创建它,这将使它成为主要的、唯一的并且 incremented.If 它是自然键
$table->string('crn')->unique();
$table->primary('crn');
而且我认为您的 'crn'
似乎很自然。
我有一个 table 的数据,其中主要的唯一元素称为 CRN
,表示 "course registration number",它是一个整数值。
在这个 table 中有大约 4000 个 class,每个 class 都有一个唯一的 CRN。
我的问题是,在我的迁移架构构建器中,我应该将 CRN
设置为唯一、主要还是增量?
根据我的用法,unique 最有意义。
CRN 确实是独一无二的,永远不会改变。我有一个脚本可以更新与此 CRN 对应的其他列,并且将 CRN 设置为唯一将防止创建相同 CRN 的其他行。
我 运行 在没有设置 unique/primary/increments 的任何这些约束的情况下遇到的一个错误是,当我重新 运行 我的更新注册号码的脚本时,例如,对于CRN,生成一个新行而不是更新它。所以现在我有同一个 CRN 的两行数据。
İ如果您的密钥 CRN 是代理密钥,那么您应该使它成为唯一的、主要的和递增的,因为它是代理密钥并且对您的 object.If 没有任何意义,它是自然密钥,因此您不必制作它增加只是让它独一无二。
如果它是代理项,则使用 $table->increments('id'
) 创建它,这将使它成为主要的、唯一的并且 incremented.If 它是自然键
$table->string('crn')->unique();
$table->primary('crn');
而且我认为您的 'crn'
似乎很自然。