也许可以试试这样的东西。您对文章和文章扩展内容的需求可能不同,但不是从内容 -> 文章(或文章)的 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) DEFAULT '1', PRIMARY KEY (id), INDEX idx_content_status (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)默认'1',主键(id));
CREATE TABLE IF NOT EXISTS tags (id INT NOT NULL AUTO_INCREMENT, tag 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));
CREATE TABLE IF NOT EXISTS 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));