我甚至不确定这是否可行。我正在使用Kohana框架(版本2.3)。我有2个独立的数据库。一个称为“员工”,另一个称为“跟踪器”。这些数据库用于2个不同的网站。我想删除跟踪器数据库中名为'csr'的表,该表包含相同的员工数据,并将跟踪器链接到员工数据库中的员工信息。
在我的跟踪器应用程序中,我为员工提供了一个模型设置,它引用了外部的“员工”数据库。我可以从跟踪器应用程序中使用ORM查询它,一切都很顺利。员工的独特关键是'id'。
在我的跟踪器数据库中,我有一个“记录”表的模型,其中包含大约12k个条目。所有字段名称都不对应于employees数据库中employees表中的任何字段名称,但某些字段确实包含相同的信息。 “记录”的唯一键是Transaction_Number
请注意我没有写这个应用程序或设计数据库。我试图“改装”跟踪器应用程序以使用现在集中的员工数据。
“记录”中有9个字段,其中包含员工数据库中的匹配信息。这9个字段包含员工ID和姓名,但不是都是相同的ID。
我可以更改这9个字段中的数据,以便它们都是员工ID,如果它有帮助但我需要能够获得员工数据:名称,地址等,基于其中任何一个的ID字段
重新设计数据库会导致重写跟踪器应用程序,我真的没有时间去做所有这些。
为了保存一些阅读,我不在这里包括表结构,但如果需要我可以添加它们。
如何将这两个表链接在一起?
编辑:为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个字段指向employees数据库中的employee.id字段。
答案 0 :(得分: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。
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的新VIEW,它将RECORDS_BASE连接到EMPLOYEES中的多行:
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列中的内容。这是谁的名字?无论如何,我会留下你的决定。我已经展示了如何获得employees表中每个相关行的引用,所以请选择。