레인 수가 다른 랙 수를 가질 수있는 경우 해당 정보를 테이블에 저장하는 것이 좋습니다.
-- Predicate: "Warehouse number <warehouse_num> is called <warehouse_name>."
create table warehouses (
warehouse_num integer primary key,
warehouse_name varchar(45) not null unique
);
-- Predicate: "Warehouse number <warehouse_num> contains lane <lane_num>."
-- This table allows different numbers of lanes per warehouse. If you change
-- the data type to, say, varchar(2) or varchar(3), you can accommodate
-- different lane "names" in each warehouse. For example, one warehouse
-- might name its lanes "Lane 1" and "Lane 2", while a different warehouse
-- might use "Lane A" and "Lane B2".
create table lanes (
warehouse_num integer not null references warehouses (warehouse_num),
lane_num integer not null check (lane_num > 0),
primary key (warehouse_num, lane_num)
);
-- Predicate: "Lane <lane_num> in warehouse <warehouse_num> contains rack
-- <rack_num>."
-- Allows a different number of racks in each lane.
create table racks (
warehouse_num integer not null,
lane_num integer not null,
rack_num integer not null check (rack_num > 0),
primary key (warehouse_num, lane_num, rack_num),
foreign key (warehouse_num, lane_num)
references lanes (warehouse_num, lane_num)
);
-- Predicate: "Rack <rack_num> in lane <lane_num> in warehouse
-- <warehouse_num> contains shelf <shelf_num>." Allows a different
-- number of shelves in each rack.
create table shelves (
warehouse_num integer not null,
lane_num integer not null,
rack_num integer not null,
shelf_num integer not null check (shelf_num > 0),
primary key (warehouse_num, lane_num, rack_num, shelf_num),
foreign key (warehouse_num, lane_num, rack_num)
references racks (warehouse_num, lane_num, rack_num)
);
-- "Contents" might be a better name than inventory. You might also need
-- a unique constraint on stack_id.
-- Predicate: "Stack <stack_id> is stored in warehouse <warehouse_num> in lane
-- <lane_num> in rack <rack_num> on shelf <shelf_num>."
create table inventory (
warehouse_num integer not null,
lane_num integer not null,
rack_num integer not null,
shelf_num integer not null,
stack_id integer not null,
primary key (warehouse_num, lane_num, rack_num, shelf_num, stack_id),
foreign key (warehouse_num, lane_num, rack_num, shelf_num)
references shelves (warehouse_num, lane_num, rack_num, shelf_num)
);
차선, 선반 및 선반에 번호가 매겨져 있다고 가정합니다. 그렇지 않다면 이름을 사용하십시오. 무의미한 ID 번호 대신 실제 레인 이름, 랙 이름 및 선반 이름을 사용하여 인벤토리에 대한 쿼리는 사람이 읽을 수있는 결과를 생성하기 위해 조인이 필요하지 않습니다. 창고가 물류 센터 일지라도 빠른 속도로 진행될 것입니다.
테이블 사이의 외래 키 제약 조건은 적어도 선반, 랙 등을 식별하는 데있어 매우 높은 수준의 데이터 무결성을 제공합니다. 대부분의 경우에는 한 번만 채워야하며 대부분을 다시 구성해야합니다. 창고의 차선과 선반.
용어 : "차선"은 일반적으로 통로 또는 행이라고합니다. 나는 영어로 차선이라고 불리는 창고에서 한 줄을 본 적이 없지만, 당신이 의미하는 바를 이해합니다. 당신이 이걸 만들면 누구 에게라도 물어 보면 알려줄 것입니다.
경로를 뒤집어서 "불규칙한 행렬"문제를 해결할 수 있습니다. 선반에는 부모 선반이 있습니다. 선반에는 부모 레인이 있습니다. 레인은 창고에 산다. 그래서 모든 객체는 부모 포인터 만 필요로하고, 하나 이상의 객체가 같은 부모를 가리킬 수 있습니다. 모델의 레벨을 재귀 모델로 결합 할 수 있습니다. 심지어 제약 조건을 적용 할 수 있습니다 (차선은 선반을 부모로 가질 수 없습니다) – wildplasser
하나의 테이블로 그 차선을 사용할 것을 제안합니까? 기본적으로 parent_id 열과 레코드 유형 (웨어 하우스, 레인, 랙, 선반)에 대한 속성? – Roger
네, 그건 기본적으로 요점입니다. 토폴로지에 제약 조건을 두는 재귀 모델 ("랙 당 12 개 이하의 상자")에서 다소 힘들지 만, 대부분의 경우 현실은 그에 대한 충분한 제약을 가할 것입니다. 그리고 네가 네덜란드 인이라면 Veldwijk을 읽어라. – wildplasser