2011-08-06 104 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