2013-03-06 83 views
0

我正在爲Yii web應用程序設計數據庫,我不確定我是否正確地做了這件事。Yii數據庫結構

CREATE TABLE user 
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    username VARCHAR(128) NOT NULL, 
    password VARCHAR(128) NOT NULL, 
    email VARCHAR(128) NOT NULL, 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE post 
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    title VARCHAR(128) NOT NULL, 
    description TEXT NOT NULL, 
    media TEXT NOT NULL, 
    tag_id INTEGER NOT NULL, 
    status INTEGER NOT NULL, 
    create_time INTEGER, 
    update_time INTEGER, 
    user_id INTEGER NOT NULL, 
    CONSTRAINT FK_post_user FOREIGN KEY (user_id) 
     REFERENCES user (id) ON DELETE CASCADE ON UPDATE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE comment 
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    content TEXT NOT NULL, 
    status INTEGER NOT NULL, 
    create_time INTEGER, 
    user_id INTEGER NOT NULL, 
    post_id INTEGER NOT NULL, 
    CONSTRAINT FK_comment_post FOREIGN KEY (post_id) 
     REFERENCES post (id) ON DELETE CASCADE ON UPDATE RESTRICT 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

CREATE TABLE tag 
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(128) NOT NULL, 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

問題:

1)在交表我已經TAG_ID。我正在考慮將所有現有和新添加的標籤存儲在標籤表中,然後當某人使用已存在的標籤或將新標籤添加爲tag_id以使用「,」發佈表格時。這是最好的解決方案嗎?

2.)在評論表中我有user_id和post_id。我認爲外鍵在那裏工作應該在評論表中設置2個外鍵?我試過,但得到錯誤。

3.)在郵政表中有媒體行。我要將這一行的位置存儲到上傳的圖像或嵌入來自YouTube /或任何其他來源的代碼。這可以使用只有相同的行,或者我應該使用分離? 1爲圖像,1爲嵌入代碼?

在此先感謝

回答

0

1)情況下,我會使用列名稱爲tags,而不是tag_id在那裏我會保持TAG_ID的系列化陣列從表tags

2)我想是因爲你嘗試過的問題添加具有相同名稱的外鍵。 嘗試使用

CONSTRAINT FK_comment_post FOREIGN KEY 
CONSTRAINT FK_comment_post_2 FOREIGN KEY 

3)將是什麼,如果你決定要添加其它媒體的信息在後期(pdf_file,或音樂)。在表格中添加新欄不是正確的。我建議你創建額外的表格postmeta,您可以在其中創建任何類型的內容,而使用post_text代替media。就像在wordpress中一樣。