2010-10-29 105 views
0

當我允許用戶在多個類別中輸入帖子時,我的mysql表應該如何顯示。它應該看起來像例1或例2中的下面的mysql表或者其他不同的東西?MySQL表結構問題

例1

CREATE TABLE ac (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    dateCREAT DATETIME NOT NULL, 
    PRIMARY KEY (id) 
); 

例2

CREATE TABLE ac (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    dateCREAT DATETIME NOT NULL, 
    PRIMARY KEY (id) 
    UNIQUE KEY (categoryID, articleID) 
); 

回答

0

假設ac表是你junction table,你可能不需要在那裏surrogate keyid

然後,您可以使用複合主鍵來執行的,而不是使用唯一約束在同一篇文章不能發佈兩次同一類別的限制,:

CREATE TABLE ac (
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    dateCREAT DATETIME NOT NULL, 
    PRIMARY KEY (categoryID, articleID) 
); 

如果應用程序需要的代理鍵id,那麼你的第二個例子就是要走的路。獨特的約束不允許將相同的文章發佈到同一類別,但可以將任何特定的文章發佈到多個類別。

+0

如果我想保留'id',該怎麼辦? – HELP 2010-10-29 22:41:35

+0

用我的想法更新了我的答案。 – 2010-10-29 22:47:56

0

我不太確定我是否從描述中理解了您的表格設置。

假設你有一個文章表和一個類別表,並且你想將一篇文章映射到多個類別,那麼你通常會有一個只有articleID和categoryID的中間表。

例如就像

CREATE TABLE postCategoryMappingc (
    categoryID INT UNSIGNED NOT NULL, 
    articleID INT UNSIGNED NOT NULL, 
    PRIMARY KEY (categoryID,articleID) 
); 

不知道你需要什麼dateCREAT字段,但我可以去那裏,如果絕對需要。