2013-03-06 94 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中一样。