簡體   English   中英

插入多對多數據庫和取消操作背后的邏輯

[英]Logic behind Insert into many to many database and cancellation

我正在建立一個網站,我對php和sql有一點了解。 當涉及到數據庫中的多對多關系時,我遇到很多問題。

我有每種材料都專用的產品,例如2種材料不能有相同的產品

材料是皮革,類似皮革,布料,PVC

使用領域是該材料可以使用的領域:運動,休閑,工作

問題是材料可以用於許多領域,並且一個領域關聯了許多材料,所以它是N:M

一個產品可以用於很多領域,一個領域可以用於很多產品,所以它太N:M

例如,皮革可以用於工作,運動,工作場所和辦公室的布料

該產品可用於某些或所有應用領域,反之亦然。

要實現這個更好的架構是A還是B?

(產品的材料應用領域總是相同的,不能是屬於材料應用領域沒有的材料的產品)

A) http://i60.tinypic.com/27zdk4k.jpg B) http://i57.tinypic.com/2mhc03o.jpg

如果我正確理解的話,那么在這兩者之間的“中間”表上有許多關系。

因此,在數據庫中插入數據和值時,我擁有的是:

材料

  • 1個皮革

  • 2布

MAtERIAL_APPL_FIELD

  • 1 1
  • 1 2
  • 2 2

APPLICATION_FIELD

  • 1航海
  • 2休閑

這樣,皮革有2個應用領域。 但是,我如何以一種聰明的方式來填補中間桌呢?

另外,當我想取消某些內容時,哪種架構更好? 我應該從所有桌子上取消嗎?

這是另一個好的解決方案:

創建表材料(material_id tinyiny unsigned not null auto_increment主鍵,材料varchar(60));

創建表使用(use_id tinyiny unsigned not null auto_increment主鍵,使用varchar(60));

創建表應用程序(application_id int unsigned不為null auto_increment主鍵,材料tinyint unsigned,使用tinyint unsigned,活動的tinyint unsigned默認= 1);

插入到應用程序(材料,用途)中的值(?,?);

問號將代表材料的ID和用途的ID。

最好不要從表中實際刪除行。 相反,您可能希望停用它們。 嘗試這個:

更新設置為active = 0的應用程序,其中application_id =?;

更新應用程序設置為活動= 0,其中材料= 1,使用= 2;

更新應用程序,設置為active = 0,其中material =(從material =“皮革”的材料中選擇material_id)和use =(從use =“ sport”的用途中選擇use_id);

如果我正確理解了您的問題,則下面的解決方案應該有效。 請記住,它們可能是您問題的多種正確解決方案,並且我並未實際測試此代碼,因此可能會出現輸入錯誤。

創建表應用程序(application_id int unsigned not null auto_increment主鍵,材料enum('leather','sleather-leather','cloth','PVC'),使用enum('sport','leisure','work') );

將值(“皮革”,“工作”)插入到應用程序(材料,用途)中;

插入應用程序(材料,用途)值(“皮革”,“休閑”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM