创建表之间的关系

时间:2011-08-06 00:51:31

标签: mysql

我有狗,猫,马的表格,包含有关它们的信息行,我想创建一张桌面照片,其中可以创建关于每张照片的信息,因此想要建立一对多的关系黑白名称每张桌子的属性与桌子照片。我在每个表中使用name属性并将其设置为唯一但不是主要的,我想要一种方法来加入它们,以便每个名称如果照片表中有多个条目就可以显示它们。

1 个答案:

答案 0 :(得分:0)

我强烈建议您使用int主键而不是名称来链接表。

如果您需要更改任何动物的名称,链接会有效中断。

简单示例:

CREATE TABLE `animals` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL,
  `species` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
);


CREATE TABLE `images` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `animal_id` int(10) NOT NULL,
  `image_url` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

您也可以为物种创建第三个表并将其设为链接而不是文本字段。

这个想法是易于管理和面向未来的。

获取特定动物及其所有图像的数据的查询将如下所示:

SELECT a.name, a.species, i.image_url
FROM animals a
LEFT JOIN images i ON (i.animal_id = a.id)
WHERE a.id = 123;

name     species     image_url
-----    -----       -----
Fido     dog         images/fido1.jpg
Fido     dog         images/fido2.jpg

其他查询也是可能的,但是这种方案允许您拥有相同名称的动物并且不会发生冲突。