Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4:如何使用Rails迁移替换主键列?_Ruby On Rails_Ruby On Rails 4_Activerecord_Rails Migrations - Fatal编程技术网

Ruby on rails Rails 4:如何使用Rails迁移替换主键列?

Ruby on rails Rails 4:如何使用Rails迁移替换主键列?,ruby-on-rails,ruby-on-rails-4,activerecord,rails-migrations,Ruby On Rails,Ruby On Rails 4,Activerecord,Rails Migrations,我有一个电子商务应用程序正在生产中运行,它是一个初创公司,所以当我创建它时,我是一个nobai,它有一个很大的结构问题。我的产品表没有SKU列,我正在使用默认的rails id,我需要添加一个新的列SKU并将其设置为产品的主键,我找到了一篇文章,解释了如何用SKU列替换默认id,但它在创建表时起作用,但我的应用程序拥有数千种产品和数千名用户 那么,生产应用程序用字符串SKU列替换products表的当前主键id的最佳实践是什么?如何解决此结构问题?该表是否为另一个表的主表?是否要更改所有相关表以

我有一个电子商务应用程序正在生产中运行,它是一个初创公司,所以当我创建它时,我是一个nobai,它有一个很大的结构问题。我的产品表没有SKU列,我正在使用默认的rails id,我需要添加一个新的列SKU并将其设置为
产品的主键,我找到了一篇文章,解释了如何用SKU列替换默认id,但它在创建表时起作用,但我的应用程序拥有数千种产品和数千名用户


那么,生产应用程序用字符串SKU列替换products表的当前主键
id
的最佳实践是什么?如何解决此结构问题?

该表是否为另一个表的主表?是否要更改所有相关表以更改外键?你只需要给sku添加一个唯一的索引并设置一个NOTNULL约束就行了吗?你认为只需添加一个sku列并将其设置为NOTNULL就能解决这个结构性问题吗?是的,我想用
SKU
替换所有外键,用
id
替换
SKU
好吧,这只是我个人的观点:业务域永远不应该用于主键和外键,业务规则可能会改变,但生产关系的改变可能会带来很大的成本。另外,使用字符串(我猜SKU是字符串)的DB连接对于数据库来说非常繁重。所以是的,我认为一个非空的和唯一的应该对你有很大帮助。但再一次,这正是我的想法。我同意@Aguardientico。我认为您最好还是坚持products表的现有PK,简单地将SKU添加为非空列。在电子商务应用程序中,产品表将与许多其他表相关。更改PK可能会导致您必须进行许多其他更改。好的,您认为从模型验证唯一性就足够了吗?还是应该在db迁移中添加该规则?