2012-07-09 24 views
1

我有一個表products和一個categories表,它們都可以有選擇地在images表中具有相關記錄。數據庫設計:如何處理具有非唯一外鍵的表

images.fk1的值可以指向categories.idproducts.id,因此,我已經添加了一個柱images.related_to

當我想要檢索類別及其圖像我用

WHERE categories.id = images.fk AND images.related_to = 'categories' 

但很明顯,如果現在的類別沒有一個像我的查詢將返回任何事情,因爲WHERE images.related_to = 'categories'的。

我可以解決這個問題,首先運行一個查詢來查看類別是否有圖像,但這似乎不是一個好的解決方案。

images.fk不包含唯一值是否認爲是不好的設計? 我應該分開categories.imagesproducts.images表嗎?那麼,如果我也有圖像usersshops,suppliers

回答

1

你可以想想images,因爲它是一個多功能圖像存儲。製作images主鍵auto_increment並且不在此表中存儲圖像fk:images(image_id, src, size, etc... , Primary(image_id))

創建一個(或三個)多表(簡化代碼):images_on_categories (category_id, image_id, Primary(category_id, image_id))

或者:images_on_users (user_id, image_id, Primary(user_id, image_id))

你可以這樣創建FK:FOREIGN KEY (images_on_users.user_id) REFERENCES users (users.user_id)

1

兩個更多的表說

ProductImages(產品編號,圖像標識)CategoryImages(類別ID,圖像標識)

然後ProductImages有FK到產品和和FK將圖像

CategoryImages有一個FK類別和一個FK圖像

是經典的解決方案。

1

如果我理解好您的問題,我會做這種方式:

  • 產品和類別之間的基數爲N:M(一種產品可以有多個類別和一類屬於多個產品
  • 我增加了一個叫做「IMAGES」另一個表,一個產品可以有多個圖像和一個圖像屬於一個產品,因此基數是1:N

你只需要添加其他屬性

enter image description here

相關問題