当我允许用户在多个类别中输入帖子时,我的mysql表应该如何。它应该看起来像示例1或示例2中的下面的mysql表还是不同的东西?
示例1
CREATE TABLE ac (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
categoryID INT UNSIGNED NOT NULL,
articleID INT UNSIGNED NOT NULL,
dateCREAT DATETIME NOT NULL,
PRIMARY KEY (id)
);
示例2
CREATE TABLE ac (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
categoryID INT UNSIGNED NOT NULL,
articleID INT UNSIGNED NOT NULL,
dateCREAT DATETIME NOT NULL,
PRIMARY KEY (id)
UNIQUE KEY (categoryID, articleID)
);
答案 0 :(得分:0)
假设ac
表是您的junction table,那么您可能不需要surrogate key id
。
然后,您可以使用复合主键强制执行约束,其中同一篇文章无法两次发布到同一类别,而不是使用唯一约束:
CREATE TABLE ac (
categoryID INT UNSIGNED NOT NULL,
articleID INT UNSIGNED NOT NULL,
dateCREAT DATETIME NOT NULL,
PRIMARY KEY (categoryID, articleID)
);
如果您的应用程序需要代理键id
,那么您的第二个示例将是可行的方法。唯一约束不允许将同一篇文章发布到同一类别,但允许将任何特定文章发布到多个类别。
答案 1 :(得分:0)
我不太清楚我是否从说明中了解了您的表格设置。
假设你有一个文章表和一个类别表,并且你想将一篇文章映射到多个类别,那么你通常会有一个只有articleID和categoryID的中间表。
e.g。 ......好像
CREATE TABLE postCategoryMappingc (
categoryID INT UNSIGNED NOT NULL,
articleID INT UNSIGNED NOT NULL,
PRIMARY KEY (categoryID,articleID)
);
不确定您需要dateCREAT字段,但如果绝对需要,我也可以去那里。