有人可以演示吗?
我正在使用MySQL,但这个想法应该是一样的!
修改
事实上,我在问学说Doctrine_Relation
和Doctrine_Relation_ForeignKey
之间的区别是什么?
答案 0 :(得分:2)
我怀疑你正在看的是从一个db表到另一个db表的map列。您可以使用一些字符串比较算法来完成此操作像Levenstein或Jaro-Winkler这样的算法可以让你推断出“匹配”列。
例如,如果db1.tableA具有列L_Name并且db2.tableB具有LastName列,则字符串距离匹配将获取一个度量。您可以通过比较行中的值来扩展它,以检查是否存在某种一致性,例如,如果两个表中的值包含:“Smith”,“Johnson”等,您将获得双赢。
我最近做了类似的事情,整合了多个大型数据库(其中一个用不同的语言 - 法语!),结果证明这是非常棒的体验。
HTH
答案 1 :(得分:1)
您应该使用外键来关联MySQL中的表,因为它不提供其他方法来创建关系(例如面向对象数据库中的引用或嵌套表)。
请参阅: http://lists.mysql.com/mysql/206589
编辑: 如果您愿意使用Oracle,则引用和嵌套表是在表之间创建关系的替代方法。参考文献更通用,所以这里有一个例子。
由于引用是以面向对象的方式使用的,因此您应首先创建类型和表来保存该类型的对象。
让我们创建一个对象类型的员工,其中包含对其经理的引用:
CREATE TYPE employee_type AS OBJECT (
name VARCHAR2(30),
manager REF manager_type
);
我们还应该为经理创建一个对象类型:
CREATE TYPE manager_type AS OBJECT (
name VARCHAR2(30),
);
现在我们创建两个表,一个用于员工,另一个用于管理员:
CREATE TABLE employees OF employee_type;
CREATE TABLE managers OF manager_type;
我们可以使用引用来关联这些表。要在employee表中插入员工,只需执行以下操作:
INSERT INTO employees
SELECT employee_type('Bob Jones', REF(m))
FROM managers m
WHERE m.name = 'Larry Ellison';
答案 2 :(得分:0)
嗯,你可以通过处理服务器端语言中的关系来解决这个问题。一些数据库抽象层可以为您处理(例如PHP的Zend_Db_Table),但建议使用外键。
MySQL有InnoDB存储引擎,支持外键和事务。
答案 3 :(得分:0)
使用外键是创建关系的标准方法。替代品几乎不存在,因为您必须识别相关的行SOMEHOW。
链接两个表的列(或列集)是一个外键 - 即使它没有在其上定义约束(甚至索引)并且不是表的主键之一(虽然在这种情况下你最终可能会遇到一种奇怪的情况,你加入时可能会得到意想不到的笛卡尔积,因为你最终会得到一套与你想要的设定关系,这可能不是你想要的)
没有外键约束是使用外键的障碍。