台灣最大程式設計社群網站
線上人數
629
 
會員總數:244668
討論主題:188773
歡迎您免費加入會員
討論區列表 >> MS SQL >> [SQL]關聯欄位修改的資料表該如何做
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[SQL]關聯欄位修改的資料表該如何做
價值 : 0 QP  點閱數:6651 回應數:3

樓主

FAQ
初學者
269 73
0 71
發送站內信

關聯欄位修改的資料表該如何做
我有兩個table,目前的架構是這樣的,access資料庫
================================
table1
欄位A(不可重覆與table2的欄位B建立關聯修改,無關聯刪除)
table2
欄位B(可重覆)
================================
就是說若我現在修改table1的A欄位內容
則table2的B欄位內容有相同的也會跟著修改
這部份沒問題
可是若我一但刪除table1的A欄位內容
若剛好table2的B欄位也有相同的內容時就會顯示錯誤無法刪除
可是我現在想要建立的資料架構就是
修改table1的A欄位內容後,則table2的B欄位內容有相同的也會跟著修改
而刪除table1的A欄位內容時,table2的B欄位有相同內容的不要被刪
可是現在這樣作就會出現錯誤無法刪除
因為以後table1的A欄位我還會再關聯到新的table上去
我希望這樣對我修改資料會比較有效率,所以才建立關聯
若不建立關聯,若是修改table1的A欄位內容時
還要再多加其它程式對其它table相關的欄位作修改
這個問題重點就是…若我兩個table有建立關聯修改一對多
在我刪除table1的資料後table2的資料還是可以保存
可是現在就是不能刪,一直出現錯誤

下面是access軟體給我的錯誤=========================
因為<名稱>資料表包含相關的記錄,故無法刪除或變更此記錄。 (錯誤 3200)
您所執行的工作可能會違反相關資料表的參考完整性規則。 
例如,如果您試圖刪除或變更在一對多關聯的「一」資料表當中的資料時
若在「多」資料表中仍存有相關資料時,便會產生錯誤。
如果您欲刪除或變更記錄,首先須將「多」資料表中的相關記錄刪除。

referential integrity
Rules that you set to establish and preserve relationships between tables when you add, change, or delete records. Enforcing referential integrity prohibits users from adding records to a joined table for which there is no primary key, changing values in a primary table that would result in orphaned records in a joined table, and deleting records from a primary table when there are matching related records. 

If you select the dbRelationDeleteCascade or dbRelationUpdateCascade option for a relationship, the Microsoft Jet database engine allows changes and deletions but changes or deletes related records to make sure the rules are still enforced. 

one-to-many relationship
An association between two tables in which: 

The primary key value of each record in the primary table corresponds to the value in the matching field or fields of many records in the related table.


The primary key value of each record in the related table corresponds to the value in the matching field or fields of one and only one record in the primary table. 

本篇文章發表於2002-03-21 22:05
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
如果您建立了關聯, 應該就做不到您要的要求才是
只能將關聯刪除, 然後自行撰寫關於更新時同步的問題, 如果資料庫是您設計的, 其實您可以自訂一個欄位, 用它來做關聯, 不要用可以修改的欄位來做關聯, 便不會有需要同步修改的問題
本篇文章回覆於2002-03-22 10:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

FAQ
檢舉此回應
對啊…真是的
早在資料庫軟體設計時就該考量到這個問題了
應該要有一種只關聯更新,不關聯刪除
而在刪資料時不出問題的方法才對
現在我的程式就必須要改成
刪除關聯,修改table1的A欄位內容時
程式也去修改其它有table1的A欄位的table的欄位
每多加一個新的table要相關table1的A欄位時
那程式就要再改一次
本篇文章回覆於2002-03-22 11:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
別怪人家哦! 這種考量是合理的
其實您可以設計成不允許修改A欄位, 如果A欄位可以被修改, 就不要用它來建關聯, 使用別的欄位做為Primry key,便不會有您的問題存在, 如果資料庫是您設計的, 您不妨改一下, 如果是既有的且不容改變, 那麼就寫一個副程式來做這件事
本篇文章回覆於2002-03-22 12:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.