2012-07-20 3 views
1

의 위치를 ​​유지하기 위해 적절한 방법 나는 그룹라는 테이블이있는 경우 :재고 시스템 - 상태 추적 및 부품

[Part_one_id|Part_two_id|Part_three_id|status|location] 
    1   7   6  ready  long/lat 
    2   2   9  in-use long/lat 

그리고 각 부분에 대한 별도의 세 부분 테이블이 있습니다 :

 Part one      Part two     Part three 
[id][measurement]    [id][pressure]    [id][temperature] 

을 어떤 방법으로 위치와 상태를 추적해야합니까?

  1. 그룹의 상태 업데이트, 자신의 테이블에 부품의 상태와 위치를 업데이트하는 다른 쿼리를 실행할 때마다
  2. 나는 위치 내가 어떤 그룹을보고 어디에 있는지 찾을 필요가 경우 현재 위치에 있습니다.
+0

트리거로이 작업을 수행하거나 활성 레코드가있는 MVC 프레임 워크를 사용하는 경우 임의 테이블에 대한 AfterSave 업데이트를 수행하십시오. – Panagiotis

+0

옵션 2를 사용할 것입니다. 트리거가 필요하지 않으며 3 개의 파트 테이블에 중복 정보를 추가하는 대신 하나의 테이블에 그룹의 항목 위치를 중앙 집중화합니다. –

+0

@ Eric하지만 선택으로 파트와 위치를 간단히 나열하고자합니다. 데이터베이스에서 현재 위치를 찾은 후 PHP에서 목록을 반복해야합니다. – user781439

답변

1

박쥐의 테이블 구조에서 볼 수있는 몇 가지 큰 문제점이 있습니다.

  1. 당신과 같이있는 테이블이해서는 안 : 당신이 큰 테이블과 함께, 당신은 열을 추가하는 데 필요한 원래 디자인보다 행에 더 많은 부품을 추가 할 경우이이기 때문에 part1_id, part2_id, ...을 untractable. 대신 조인 테이블과의 다 대다 관계를 사용하십시오.
  2. 특정 위치의 스냅 샷을 갖도록 위치를 감사해야합니다. 즉, part_id, location_id, 작성, 수정 된 테이블 및 lat/long이있는 위치 테이블이 있어야합니다.

질문 자체에 대한 답변. 필자는 구문이 그리 좋지 않고 PostgreSQL이나 Oracle 같은 다른 데이터베이스에서하는 것처럼 많이하지 않기 때문에 MySQL 트리거를 특히 좋아하지 않습니다. 즉,이 인스턴스에서 트리거에 대한 매력적인 점은 트리거가 트리거와 동일한 트랜잭션에서 실행되므로 트리거를 트리거하는 것과 동일한 비즈니스 규칙이 실행된다는 것입니다. 그러나 데이터베이스에 액세스하는 데 사용하는 항목에 따라 트랜잭션을 시작하고 감사 삽입을 완료 할 때까지 트랜잭션을 종료 할 수 있습니다. 테이블이처럼 보이도록 변경 될지 궁극적으로

것 :

그룹 : ID, 이름, 생성, 수정, 상태가

가 part_group : part_id, GROUP_ID, 생성,

위치를 수정 : 긴 ID, 위도,

group_location : GROUP_ID, location_id, 생성, 그리고 가장 최근에 생성 된

수정 group_location은 주어진 그룹의 현재 위치를 가리 킵니다.