我正在为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 :(得分:0)
1)如果我使用名为tags
的列而不是tag_id
,我会在表tags
2)我认为这个问题是因为您尝试添加具有相同名称的外键。 尝试使用
CONSTRAINT FK_comment_post FOREIGN KEY
CONSTRAINT FK_comment_post_2 FOREIGN KEY
3)如果您决定在帖子中添加其他媒体信息(pdf_file或音乐),将会是什么。在表格中添加新列不正确。我建议您创建其他表格postmeta
,您可以在其中创建任何类型的内容,而media
使用post_text
。就像在wordpress中一样。