2010-07-01 2 views
3

이것이 가능한지 확실하지 않습니다. 나는 Kohana 프레임 워크 (버전 2.3)를 사용하고 있습니다. 나는 2 개의 분리 된 데이터베이스를 가지고있다. 하나는 '직원'이라고하고 다른 하나는 '추적자'라고합니다. 데이터베이스는 2 개의 다른 웹 사이트에서 사용됩니다. 나는 동일한 직원 데이터를 포함하는 추적자 데이터베이스에서 'csr'이라는 테이블을 제거하고 트래커를 직원 데이터베이스의 직원 정보에 연결하려고합니다.어떻게 테이블에 정의 된 foriegn 키없이 2 개의 별도 데이터베이스에서 ORM을 사용할 수 있습니까?

내 추적 애플리케이션에는 외부 '직원'데이터베이스를 참조하는 직원을위한 모델 설정이 있습니다. 추적기 응용 프로그램에서 ORM을 사용하여 쿼리 할 수 ​​있으며 모든 것이 잘 수행됩니다. 직원의 고유 키는 'id'입니다.

내 추적기 데이터베이스에는 약 12k 개의 항목이있는 '레코드'테이블에 대한 모델이 있습니다. 필드 이름은 직원 데이터베이스의 employees 테이블에있는 필드 이름과 일치하지 않지만 일부 필드에는 동일한 정보가 들어 있습니다. '레코드'의 고유 키는 Transaction_Number입니다.

이 애플리케이션을 작성하거나 데이터베이스를 디자인하지 않았습니다. 지금은 중앙 집중식 직원 데이터를 사용하기 위해 트래커 응용 프로그램에 "역 호환"을 시도하고 있습니다.

직원 데이터베이스에 일치하는 정보가 들어있는 '레코드'에는 9 개의 필드가 있습니다. 이 9 개의 필드는 직원 ID와 이름을 포함하지만 모두 동일한 ID는 아닙니다.

이 9 개의 필드의 데이터를 변경하여 모든 직원 ID가 될 수 있지만 직원 데이터를 가져올 수 있어야합니다 (이름, 주소 등). 9 개 필드

데이터베이스를 재 설계하면 추적 프로그램을 다시 작성해야하므로 실제로 모든 작업을 수행 할 시간이 없습니다.

일부 독서를 저장하려면 여기에 표 구조를 포함하지 않아도되지만 필요한 경우 추가 할 수 있습니다.

두 테이블을 함께 연결하려면 어떻게해야합니까?

편집 : tracker.records

TRACKER.RECORDS 
Transaction_Number (PK AI not null) 
date 
accountnumber 
reasoncode 
reasondesc 
actioncode 
actiondesc 
comments 
supervisor  - employee->id (supervisor that created the record) 
supername   - employee->name 
supersuper  - employee->parent->name 
superman   - employee->parent->parent->name 
eid    - employee->id (employee that the record is about) 
Service_Rep  - employee->name 
ServRepSupervisor - employee->parent->name 
ServRepManager - employee->parent->parent->name 
csrfollow   - employee->name (who to follow up with) 
Important 
Read 
Followup_Read 
followup_Important 

직원 테이블에 추가 된 테이블 구조는 ORM_Tree 자기의 관계로 사용하고 있습니다.

해당 필드에 대한 직원 정보를 얻을 수 있어야합니다. 각 필드의 데이터를 직원 ID로 변경할 수 있으며 일부는 제거 할 수 있다고 생각합니다. 내가 집회에 필요한 것은 감독자 (employee-> id), eid (employee-> id) 및 csrfollow (employee-> id로 변경 가능)뿐입니다. 다른 필드는 employee-> id를 기반으로 검색 할 수 있습니다. 그 3 개의 필드가 직원 데이터베이스의 employee.id 필드를 가리 키도록해야합니다.

답변

1

MySQL은 두 데이터베이스가 MySQL의 동일한 인스턴스에서 호스팅되는 한 외래 키가 데이터베이스에서 테이블을 참조 할 수 있다는 것을 알고 있습니까?

CREATE TABLE `employees` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY 
    -- other columns... 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

CREATE TABLE `records` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `employee_id` bigint(20) unsigned DEFAULT NULL, 
    -- other columns... 
    FOREIGN KEY (`employee_id`) REFERENCES `employees`.`employees` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

참조 된 테이블 이름을 해당 데이터베이스 이름으로 한정하기 만하면됩니다.


업데이트 : TRACKER에 속한 고유 한 데이터로 RECORDS의 이름을 RECORDS_BASE로 변경할 수 있습니다.

CREATE VIEW TRACKER.RECORDS AS 
SELECT rb.*, 
    s.id AS supervisor, 
    s.name AS supername, 
    ss.name AS supersuper, 
    sss.name AS superman, 
    emp.name AS Service_Rep, 
    srs.name AS ServRepSupervisor, 
    srm.name AS ServRepManager, 
    ??? AS csrfollow 
FROM TRACKER.RECORDS_BASE AS rb 
JOIN EMPLOYEES.EMPLOYEES AS s ON rb.supervisor_id = s.id 
JOIN EMPLOYEES.EMPLOYEES AS ss ON s.parent_id = ss.id 
JOIN EMPLOYEES.EMPLOYEES AS sss ON ss.parent_id = sss.id 
JOIN EMPLOYEES.EMPLOYEES AS emp ON rb.eid = emp.id 
JOIN EMPLOYEES.EMPLOYEES AS srs ON emp.parent_id = srs.id 
JOIN EMPLOYEES.EMPLOYEES AS srm ON srs.parent_id = srm.id; 

나는 csrfollow 열에 속한 것을 당신의 설명에서 알 수 없습니다

TRACKER.RECORDS_BASE 
Transaction_Number (PK AI not null) 
date 
accountnumber 
reasoncode 
reasondesc 
actioncode 
actiondesc 
comments 
supervisor_id 
eid 
Important 
Read 
Followup_Read 
followup_Important 

그런 다음 직원에 여러 행에 RECORDS_BASE에 가입 RECORDS라는 새로운 뷰를 생성합니다. 그게 누구 이름이야? 어쨌든 나는 당신이 결정할 수 있도록 남겨 둘 것입니다. 직원 테이블의 각 관련 행에 대한 참조를 얻는 방법을 보여 주므로 선택하십시오.

+0

나는 그것을 알고 있었지만 시도하지 않았다. 왜냐하면 내가 실제로하려고하는 것에 실제로 적용되지 않았기 때문이다. 질문을 업데이트하여 테이블 디자인을 제공하고 관계가 무엇인지 설명합니다. – DewBoy3d

+0

감사합니다. 이것은 2 개의 테이블을 결합하는 데 적합하며 나에게 좋은 중간 솔루션입니다. 결국 데이터베이스를 재 설계하고 원하는 동작을 생성하기 위해 기존 코드의 약 1/2을 다시 작성해야합니다. 다시 한번 고맙지 만 우선적으로 감사합니다. – DewBoy3d

관련 문제