MySQL表结构问题

时间:2010-10-29 22:36:37

标签: mysql

当我允许用户在多个类别中输入帖子时,我的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)
);

2 个答案:

答案 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字段,但如果绝对需要,我也可以去那里。