我想知道我是否允许我的用户选择他们的帖子将显示在哪个类别中,如果我的MySQL表格看起来像下面的表格,他们可以从一个到多个选择多个类别?如果不是我应该添加或删除什么?
这是我的MySQL表格。
CREATE TABLE users_categories (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
category_id INT UNSIGNED NOT NULL,
post_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE categories (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INT UNSIGNED NOT NULL DEFAULT 0,
category VARCHAR(255) NOT NULL,
url VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
INDEX parent (parent_id),
UNIQUE KEY(parent_id, url)
);
CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(255) DEFAULT NULL,
pass CHAR(40) NOT NULL,
PRIMARY KEY (user_id)
);
CREATE TABLE users_posts (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
title TEXT NOT NULL,
content TEXT DEFAULT NULL,
PRIMARY KEY (id)
);
答案 0 :(得分:1)
如果我理解正确,您可能需要考虑将users_categories
重命名为posts_categories
并删除user_id
列:
CREATE TABLE users_categories (
category_id INT UNSIGNED NOT NULL,
post_id INT UNSIGNED NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (category_id, post_id)
);
另请注意,您可能还希望在(category_id, post_id)
上使用复合主键,而不是使用surrogate key。这个主键可以唯一地标识每个关系,另外还可以保证没有帖子多次链接到同一个类别。
答案 1 :(得分:0)
user_id
中的 users_categories
是重复的;帖子已经与用户关联,并且该类别与帖子相关联。因此,传递上,帖子和用户之间已经存在连接。
users_categories
不需要id
,因为它是一个映射表,应该命名为posts_categories
。
users_categories
字段date_created
不太可能有用,可能是个错误。
users_posts
应该命名为posts
。
在适用的情况下使用外键约束。
其余的看起来很好。