我有狗,猫,马的表格,包含有关它们的信息行,我想创建一张桌面照片,其中可以创建关于每张照片的信息,因此想要建立一对多的关系黑白名称每张桌子的属性与桌子照片。我在每个表中使用name属性并将其设置为唯一但不是主要的,我想要一种方法来加入它们,以便每个名称如果照片表中有多个条目就可以显示它们。
答案 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
其他查询也是可能的,但是这种方案允许您拥有相同名称的动物并且不会发生冲突。