也许尝试这样的事情。您对文章和文章扩展内容的需求可能不同,但不是从内容 -> 文章(或文章)的 1..many 关系,为什么不增加在任何内容中混合/匹配内容的灵活性。如果您不需要/不希望这样做,则省略 article_content 和 post_content 表,只需将外键 content_id INT NOT NULL 分别添加到每个 post 和 article 表。
CREATE TABLE IF NOT EXISTS content (id INT NOT NULL AUTO_INCREMENT, title VARCHAR(32) NOT NULL, description VARCHAR(255) NULL, body TEXT, published DATETIME NOT NULL, updated DATETIME NULL, owner_id INT DEFAULT '0', status TINYINT( 1)默认'1',主键(id),索引idx_content_status(状态));
CREATE TABLE IF NOT EXISTS article (id INT NOT NULL AUTO_INCREMENT, title VARCHAR(32) NOT NULL, excerpt VARCHAR(255) NULL, url_slug VARCHAR(64) NOT NULL, author_id INT NOT NULL, 发布的 DATETIME NOT NULL, 更新的 DATETIME NULL, status TINYINT(1) DEFAULT '1', sort_order INT DEFAULT '1', PRIMARY KEY (id), UNIQUE INDEX idx_article_slug(url_slug), INDEX idx_article_search(title, published, status, sort_order));
CREATE TABLE IF NOT EXISTS post (id INT NOT NULL AUTO_INCREMENT, title VARCHAR(32) NOT NULL, comment VARCHAR(128) NULL, author_id INT NOT NULL, 发布的 DATETIME NOT NULL, 更新的 DATETIME NULL, 状态 TINYINT(1) DEFAULT '1 ',主键(id));
如果不存在标签,则创建表(id INT NOT NULL AUTO_INCREMENT,标签 VARCHAR(24) NOT NULL,PRIMARY KEY (id));
如果不存在则创建表 article_content (article_id INT NOT NULL, content_id INT NOT NULL, status TINYINT(1) DEFAULT '1', sort_order INT DEFAULT '1', INDEX idx_article_content_search(article_id, content_id, status, sort_order));
如果不存在 post_content (post_id INT NOT NULL, content_id INT NOT NULL, status TINYINT(1) DEFAULT '1', sort_order INT DEFAULT '1', INDEX idx_post_content_search(post_id, content_id, status, sort_order)),则创建表;
如果不存在,则创建表 article_tags (article_id INT NOT NULL, tag_id INT NOT NULL, INDEX idx_article_tag_search(article_id, tag_id));
如果不存在 post_tags (post_id INT NOT NULL, tag_id INT NOT NULL, INDEX idx_post_tag_search(post_id, tag_id)),则创建表;