Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL表结构问题_Mysql - Fatal编程技术网

MySQL表结构问题

MySQL表结构问题,mysql,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 (i

当我允许用户在多个类别中输入帖子时,我的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
,那么您的第二个示例就是解决方法。“唯一”约束不允许将同一文章发布到同一类别,但允许将任何特定文章发布到多个类别。

我不太确定我是否理解您的表设置说明

假设您有一个article表和一个category表,并且您希望将一篇文章映射到多个类别,那么您通常会有一个只包含articleID和categoryID的中间表

e、 类似

CREATE TABLE postCategoryMappingc (
    categoryID INT UNSIGNED NOT NULL,
    articleID INT UNSIGNED NOT NULL,
    PRIMARY KEY (categoryID,articleID)
); 

不确定您需要dateCREAT字段做什么,但如果绝对需要,我也可以进入该字段。

如果我想保留
id
,请更新我的答案,并说明我的想法。