0

나는 여러 테이블을 가질 계획이고 "전체적인 것"을 디자인하는 방법에 대해 확신하지 못합니다. 일부 도움을 많이 받으실 수 있습니다! :)DB 디자인 조언

기본적으로 조리법과 재료로 슈퍼마켓을 시뮬레이션하고 싶습니다. 그래서 나는 생각했다 :

  • 슈퍼마켓 (이름)
  • 제조업체 (이름) < - 많은 제품을 가지고
  • 제품 (양, 단위, 이름) <는 - 제조 업체
  • 금액에 속한다 (이름) < - 제품 수량으로 피벗
  • 단위 (이름) < - 제품 단위로 피벗
  • 성분 (이름, 제품) < - 제품으로 피벗

나는 잃어 버렸고 몇 가지 해결책을 제시 할 수있었습니다. 여러 개의 피벗 테이블에서 추가 피벗 테이블을 사용하여 테이블 전체에서 중복되는 부분을 포함 할 수있는 실제 간단한 솔루션에 이르기까지 다양합니다.

난 대신 여러 개의 작은 것들 중 하나 "큰"피벗 테이블 만들기에 대한 당신의 의견에특히 관심 :
을 - "큰"테이블은 다음과 같이 보일 것입니다 : "ID", "ingredient_id"을 " product_id ""unit_id "... 기본적으로 하나의 큰 테이블에서 모든 피벗 데이터를 결합합니다.
- 대신 "작은 테이블"은 "product_unit", "ingredient_product"처럼 보입니다. 이 질문은 나를 혼란스럽게합니다.
큰 테이블 하나가 가장 좋을 것이라고 생각하지만 솔직히 말해서 실제 아이디어가 없습니다.

저는 Laravel을 사용하고 있으며 저는 코딩이 새로 도입되었습니다. 당신의 충고를 좀 더 쉽게 해주는 어떤 도구 나 무언가가 있다면 알려 주시기 바랍니다.

미리 감사드립니다.

답변

1

나는 Laravel로 이것을 처음으로 배우는 데 많은 어려움을 겪었습니다. 이 문제의 가장 큰 장점은 마이그레이션을 사용하여 무언가를 시도하고 가장 좋은 방법이 아닌 경우 롤백하는 것입니다.

Eloquent는 [활성 레코드 패턴] [1]을 기반으로하므로 활성 레코드 가이드를 읽는 것이 큰 도움이됩니다. 당신은 [데이터베이스 정규화] [2]를 목표로 삼고 있습니다. RoR은 오랫동안 사용되어 왔고 동일한 패턴을 사용하기 때문에 "데이터베이스 정규화 레일"을 찾는 것이 더 좋았습니다.

나는 처음에했던 일을 계속하는 것이 더 쉽다는 것을 알게되었습니다.

supermarket->가

이 제품 -> 일 대 속한 많은 -> 제조 업체

제조사 :>을 많은 사람들 속한> 슈퍼마켓> 제조 업체

제조사 :>를 가지고 많은 -> 제품

제품에 항상 양이 있고 제품의 양이 많지 않은 경우 일반적으로 제품 테이블에 두는 것이 좋습니다. 일반적으로 제품에는 wholesale_amt, retail_amt가 있습니다.

당신이 단위 양 같은 경우 :

unit_amount table: 
id | title 
1 pallet 
2 case 
3 box 
4 single 

... 당신은 별도의 테이블에 그것을 넣어 것보다 있습니다. 그 이유는 쉽게 맞춤법 오류를 수정하고 한 곳에서만 다른 금액을 추가 할 수 있기 때문입니다. 개발자가 update sql에서 팔레트의 철자를 잘못 입력하면 제품 테이블에 약간 잘못된 맞춤법이 기록됩니다.

product table: 
id | title | unit_amount 
1 | water | 2 

당신은 많은 관계로 많은 피벗 테이블이 필요합니다

제품 표는이 같은 ID를 저장하는 unit_amount 열을 가질 것이다. 제조업체가 많은 제품이있는 경우가 각각 새로운 기록이다

select * from manufacturer_product where manufacturer_id = 2 

을 ... 그리고 중요한 것은이 제조 2.에 대한 모든 제품을 얻을 : 피벗 테이블이 같은 쿼리를 할 수 있도록해야한다.

manufacturer_product table: 
manufacturer_id | product_id 
    2   | 1 
    2   | 8 
    2   | 12 

당신도 그 테이블에 만약 warehouse_id을 가지고 제조업체는 900 만 2 개 창고가있는 경우 시스템의 종류 무너지게한다 : 당신이 다른 컬럼의 무리가 있다면

manufacturer_id | product_id | warehouse_id 
    2   | 1  | 1 
    2   | 8  | 
    2   | 12  | 

당신이 1 .) 당신이 필요로하지 않는 많은 데이터를 반환합니다. 2.) 더 이상 웅변적인 관계를 사용할 수는 없습니다. 3.) 테이블의 이름은 무엇입니까?

Dayle리스 나를 위해 정말 도움이되었다 여기 웅변 관계에 멋진 가이드가 있습니다

http://daylerees.com/codebright/eloquent-relationships

나는 기본적으로 관련있는 '제품'과 관련된 '재료'를로드 할

to 'manufacturers

왜냐하면'많은 것을 통해 '관계를 사용해야합니다.그 결과는 다음과 같습니다

$manufacturer = new Manufacturer; 
$ingredients = $manufacturer->ingredients(); 

역이 너무 작동합니다 :

class Ingredient extends eloquent { 

    public function products { 
     return $this->belongsToMany('Product'); 
    } 

    public function manufacturer { 
     //this is actually belongToThrough but they don't call it that 
     return $this->hasManyThrough('Manufacturer', 'Product'); 
    } 

} 

http://laravel.com/docs/4.2/eloquent#relationships

이 역은 비트를 얻을 수

class Manufacturer extends eloquent { 

    public function products { 
     return $this->hasMany('Product'); 
    } 

    public function ingredients { 
     return $this->hasManyThrough('Ingredient', 'Product'); //has many ingredients through products 
    } 

} 

당신은 이런 관계를 조회 할 수 있습니다 더 혼란스럽게 여기에서 토론을 참조하십시오 :

https://github.com/laravel/framework/issues/6161

[1] http://en.wikipedia.org/wiki/Active_record_pattern [2] http://en.wikipedia.org/wiki/Database_normalization

+0

고마워요! 그것은 매우 도움이되었다! 나는 그것을 구현하고 내가 얻을 수있는 방법을 볼 것입니다 :) 당신이 한 동안 전리품을 가져갈 수 있다면 좋을 것입니다. 나는 지금 그것을 구현하려고 노력하고있다. 그러나 나는 아직도 내 머리 속에 약간의 큰 물음표를 가지고있다. – ptrckolous