Php MySQL:使用一组列作为ID(SKU)
我正在开发一个商品库存系统,在数据库设计方面遇到了一些问题 我的Php MySQL:使用一组列作为ID(SKU),php,mysql,laravel,Php,Mysql,Laravel,我正在开发一个商品库存系统,在数据库设计方面遇到了一些问题 我的库存表列出了库存中的项目。 每个项目都是唯一的,并由类型为“x-y-z”的SKU进行标识,x,y,z是我的表格的字段 例如: 我需要能够按SKU查找项目,但还需要返回给定x、y或z的行 鉴于sku是冗余的,是否需要将sku与x、y、z一起存储 如果有办法避免这种情况,我将如何使用laravel按sku查找项目,如下所示: Item::find(sku); //sku has to be primary key 谢谢你的时间 是的,
库存
表列出了库存中的项目。
每个项目都是唯一的,并由类型为“x-y-z”的SKU进行标识,x
,y
,z
是我的表格的字段
例如:
我需要能够按SKU查找项目,但还需要返回给定x
、y
或z
的行
鉴于sku
是冗余的,是否需要将sku
与x
、y
、z
一起存储
如果有办法避免这种情况,我将如何使用laravel按sku查找项目,如下所示:
Item::find(sku); //sku has to be primary key
谢谢你的时间 是的,如果它是多余的,那么您不需要它。这个词本身就意味着它。看看这个SQL:
SELECT * FROM inventory WHERE x||'-'||y||'-'||z = sku;
sku是您正在寻找的价值。有时,它仍然可以是好的,因为性能
或者拆分字符串sku并比较x、y、z。您也应该保存sku,除非您确定x、y、z或sku永远不会更改 无论如何,您可能不想保存SKU(在一列或单独的表中),在该单独的表中保存其他列(x、y、z),并通过自动递增INT来标识产品。(更多详情) 例如: 产品:
id | the_rest_of_your_product_columns
_____________________________________
1 | ...
2 | ...
产品详情:
product_id | x | y | z | ...
____________________________
1 | 2 | 3 | 4 | ...
如果愿意,可以使用视图定义x、y和z:
create table inventory (
sku varchar(255) not null primary key
);
create view v_inventory as
select sku, substring_index(sku, '-', 1) as x,
substring_index(substring_index(sku, '-', 2), '-', 1) as y,
substring_index(sku, '-', -1) as z
from inventory;
然后,您可以访问
where
子句中的x
、y
和z
值,该子句使用v_inventory
为我,我将保留sku
单独的列,并将唯一索引添加到其中。您可以在迁移中执行此操作
$table->unique('sku');
来源
通常,Laravel会假定id
是主列名,但您可以通过将此代码放入模型中来覆盖它
class Staff extends Model {
protected $primaryKey = 'sku';
}
来源
覆盖后,可以使用sku
查找产品$item=item::find(sku)
我不知道Laravel是否允许,但MySQL允许在主键中有多个列:主键(x,y,z)
如果这不适用于Laravel,我将删除它
class Staff extends Model {
protected $primaryKey = 'sku';
}