2012-11-12 40 views
0

我正在設計一個基本上必須存儲兩種元素的網頁應用程序:帖子和容器(這是帖子數組)如何關聯兩個MySQL表中的數據?

我已經完成了數據庫,以便我在容器的每一行中存儲字符串版本它擁有的帖子數組。

問題是,當我每次打電話給容器時都會刪除一個帖子,我有帖子的ID,我必須檢查帖子是否存在。

有沒有更好的方法來做到這一點?例如構建容器表以將「指針」保存到實際的帖子中?

非常感謝!

+4

您可以使用外鍵關係來關聯這兩個表。然後檢查[級聯刪除](http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.sqls.doc/sqls118.htm):) – bonCodigo

+1

@bonCodigo +1。您應該將您的評論發佈爲答案,並稍微擴展一下。 –

回答

1

這裏回答我的評論,收到一些積極的反饋:)雖然你已經有答案了。

您的容器將持有帖子。所以就像一個籃子裏放着許多物品。 因此,每個帖子都有一個容器ID。對於容器表 - 容器ID是主鍵。帖子表 - 帖子ID是主鍵。要擁有外鍵關係,您需要在您的張貼表中將您的容器標識設置爲外鍵。如果這是令人困惑的 - 請參閱下面的表格模式。如果您希望刪除容器時與容器相關的任何帖子,則可以使用父鍵(外鍵)上的ON CASCADE DELETE刪除任何孤兒(沒有父母的兒童)。 如果您希望自動增加ID,您可以使用AUTO_INCREMENT,否則只需將其刪除即可。

請看一看sql syntax進一步瞭解。

CREATE TABLE tblParent (
    `CID` int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `field2` varchar(100), 
    `field3` varchar(100) 
); 

CREATE TABLE tblchild (
    `PID` int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `PCID` int NOT NULL, 
    `field2` varchar(100), 
    `field3` varchar(100), 
    FOREIGN KEY REFERENCE tblParent ('CID') 
    ON DELETE CASCADE 
); 
+0

這是完全的,並且完全回答我的問題,謝謝! – dpi

0

我不確定我是否正確理解了你,但是我會以相反的方式做到這一點:你有你的POST表,它有一個名爲container_ID的字段。如果帖子被刪除,那麼POST表中的一行將被刪除(包括container_ID中其父實體的指針)。在這種情況下,您可以在表之間創建外鍵關係,以保持數據庫中的數據一致和關係完好。請澄清我是否誤解了某些內容。

0

例如,您可以創建第三個包含兩個字段'container_id'和'post_id'的表。 然後,當您刪除帖子時,您將刪除包含post_id的所有條目,對容器也是同樣的東西。確保表primary_key由two_fields組成以避免條目重複。

+0

這會在帖子和容器之間創建一個「多對多」的關係......如果這是主意,那就去...但如果這個想法是「一個容器包含許多帖子,但帖子只屬於一個容器「,那麼這會增加設計的複雜性 – Barranka

2

如果我理解正確,你有一對多的關係:每個容器可以有很多帖子,但每個帖子都與一個容器相關。所以你的數據庫設計應該反映這個。

例子:

create table tbl_containers (
    containerId int unsigned not null auto_increment primary key, 
    containerDescription varchar(100) 
); 
create table tbl_posts (
    postId int unsigned not null auto_increment primary key, 
    containerId int unsigned not null, 
    postText varchar(100), 
    index idxContInd(containerId) 
); 

當您填寫您的資料,每一個崗位必須與容器相關聯;換句話說,在可以輸入帖子之前,必須有一個容器來容納它,並且如果沒有「合適的」容器,則應該在之前創建創建帖子。

將數據存入表格後,可以輕鬆查找帖子並刪除它們,而不管每個帖子所屬的容器。

希望這可以幫到你

2

在兩張表之間使用外鍵關係將是理想的。

首先,如果我正確理解您的數據之間的關係,您的Container表將保存與唯一ID有關的信息的表。然後,Posts表擁有自己的唯一ID,一個containerId和發佈內容本身。

畫出來,它看起來有點像這樣。

Container 
--- 
id 

Posts 
--- 
id | containerId | post 

ContainerPosts之間的關係被認爲是一個到多;也就是說,一個容器可能有很多帖子,但是一個帖子不能屬於許多容器。如果你想要這種關係,你可能需要爲Posts添加另一列。

相關問題