Yii数据库结构

时间:2013-03-06 00:24:29

标签: mysql database database-design yii

我正在为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个用于嵌入代码?

提前致谢

1 个答案:

答案 0 :(得分:0)

1)如果我使用名为tags的列而不是tag_id,我会在表tags

中保留tag_id的序列化数组

2)我认为这个问题是因为您尝试添加具有相同名称的外键。 尝试使用

CONSTRAINT FK_comment_post FOREIGN KEY
CONSTRAINT FK_comment_post_2 FOREIGN KEY

3)如果您决定在帖子中添加其他媒体信息(pdf_file或音乐),将会是什么。在表格中添加新列不正确。我建议您创建其他表格postmeta,您可以在其中创建任何类型的内容,而media使用post_text。就像在wordpress中一样。