2011-08-06 108 views
-1

我有狗,猫,马包含有关他们的信息行表的表,我想创建一个表照片可以创建每个照片的信息,所以想建立一对多的关系b/w名称属性与表格照片。我在每个表中使用名称属性,它被设置为唯一的,但不是主要的,我想要一种方式来加入他们,以便每个名字,如果有照片表中有多个条目,他们可以显示。创建表之间的关系

回答

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 

其他查询是可能的,但这种方案可以让你有动物具有相同的名称和他们赢得了”没有冲突。

+0

非常感谢您提供这样的描述性答案 – ashish

+0

但我不希望使用INT ID bcoz这很难记住,而是我想与名称字段的帮助一起工作,因为这很容易记住,我认为它还可以帮助制作排序a,b,c的索引,例如用于浏览名称为a,b等的狗的字母。 – ashish

+0

您不必记住任何ID,就可以使用数据库为您检索。所以如果你想得到“Fido的”信息,你可以查询他的ID:SELECT id FROM animals WHERE name ='Fido'' - 显然如果你有多个Fido,你需要更多的信息来限制记录被返回。要按名称的字母顺序列出所有狗的名单,你可以做'选择姓名从动物'种类='狗'命令名称ASC;'。相信我使用int作为主键。 – JYelton