2012-05-21 39 views
1

Mysql数据库问题。有对象(域)的系统。每个域都有自己的表。所有对象都具有独特的16 VARCHAR ID - 全局唯一标识符Mysql通过外键连接表,取决于字段类型

CREATE TABLE `guid` ( 
    `guid` varchar(16) NOT NULL, 
    `obj_type` varchar(45) NOT NULL, 
    `obj_id` varchar(45) NOT NULL, 
`actived` tinyint(4) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`guid`) 
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `product` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(150) NOT NULL,  
    /*....*/ 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE `catalog` ( 
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(150) NOT NULL, 
    /*....*/ 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

我想连接表GUID(字段:OBJ_TYPE,obj_id):通过外键(id字段)和域列表。

+0

http://www.w3schools.com/sql/sql_foreignkey.asp – cen

+1

你首先必须将引擎更改为InnoDB的,因为MyISAM数据确实不** **支持外键 –

回答

1

外键关系涉及包含中心数据值的父表以及具有指向其父项的相同值的子表。 FOREIGN KEY子句在子表中指定。父表和子表都必须是InnoDB表。它们不能是TEMPORARY表。

CREATE TABLE product 
    ( 
    id INT(11) NOT NULL auto_increment, 
    name VARCHAR(150) NOT NULL, 
    PRIMARY KEY (id), 
    FOREIGN KEY (id) REFERENCES guid (guid) 
) 
engine=myisam 
DEFAULT charset=utf8; 
+0

“外键(ID)参考guid(guid)“我们链接product.id和guid.guid它不完全是我需要的。是否可以连接product.id与(guid.obj_type = product和guid.obj_id)? – Stepchik

+0

如果将guid.obj_type = product和guid.obj_id定义为GUID表中的主键而不是guid列中的PK。然后你可以定义这样的PK-FK关系。 –

+0

并且不要忘记更改存储引擎。用MyISAM定义FK约束不会做任何事情。 –