[英]MySQL table structure question
当我允许用户输入多个类别的帖子时,我的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)
);
假设ac
表是您的联结表 ,那么您可能不需要那里的代理键 id
。
然后,您可以使用复合主键来强制执行约束,即同一篇文章不能两次发布到同一类别,而不必使用唯一约束:
CREATE TABLE ac (
categoryID INT UNSIGNED NOT NULL,
articleID INT UNSIGNED NOT NULL,
dateCREAT DATETIME NOT NULL,
PRIMARY KEY (categoryID, articleID)
);
如果您的应用程序需要代理键id
,那么您的第二个示例就是该方法。 唯一性约束不允许将同一文章发布到同一类别,但是将任何特定文章发布到多个类别。
我不确定我是否从说明中了解您的表格设置。
假设您有一个文章表和一个类别表,并且想要将一个文章映射到多个类别,那么通常会有一个仅包含articleID和categoryID的中间表。
例如
CREATE TABLE postCategoryMappingc (
categoryID INT UNSIGNED NOT NULL,
articleID INT UNSIGNED NOT NULL,
PRIMARY KEY (categoryID,articleID)
);
不确定您需要dateCREAT字段用于什么,但是如果绝对需要,我也可以在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.