Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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_Sql_Constraints_Implementation - Fatal编程技术网

Mysql 设置我的图片库表格

Mysql 设置我的图片库表格,mysql,sql,constraints,implementation,Mysql,Sql,Constraints,Implementation,我将为图片库创建一个web应用程序 这就是我创建数据库表的方式。(我已经排除了其他不必要的表格。) 画廊 Gid->主键。 Rid->注册表中的外键。 名称->图像的名称。 Url->图像的位置。 状态->启用或禁用。 专辑 辅助->主键。 名称->相册的名称。 图像列表 Iid->主键。 帮助->相册表中的外键。 Gid->库表中的外键。 但出于某种原因,我觉得这些表格的结构是错误的。我的要求是用户应该能够创建不同的相册从画廊表 例如,如果有名为A、B、C、D的图片,则用户应该能够创建名为a1

我将为图片库创建一个web应用程序

这就是我创建数据库表的方式。(我已经排除了其他不必要的表格。)

画廊 Gid->主键。 Rid->注册表中的外键。 名称->图像的名称。 Url->图像的位置。 状态->启用或禁用。 专辑 辅助->主键。 名称->相册的名称。 图像列表 Iid->主键。 帮助->相册表中的外键。 Gid->库表中的外键。 但出于某种原因,我觉得这些表格的结构是错误的。我的要求是用户应该能够创建不同的相册从画廊表

例如,如果有名为A、B、C、D的图片,则用户应该能够创建名为a1的相册,其中包含图片A、B、C;相册a2包含图片A、B、D


我已经创建了这三个表,但我觉得表结构中有问题。有人能给我指出一个正确的方向吗?

我不会把有图像的桌子称为画廊,因为这可能意味着相册。从我的观点来看,数据库模式是正确的,我唯一要更改的是ImageList表,因为那个里不需要Iid,Aid和Gid假设是唯一的索引,我还将添加字段来存储相册中的图像顺序,并将所有表设置为InnoDB模式

以下是数据库架构的示例:

-- ----------------------------
-- Table structure for `gallery_album`
-- ----------------------------
DROP TABLE IF EXISTS `gallery_album`;
CREATE TABLE `gallery_album` (
  `album_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL COMMENT 'name of the album',
  `description` text COMMENT 'description of the album',
  `visible` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'is album visible',
  `position` int(11) unsigned NOT NULL,
  `date_created` datetime NOT NULL,
  `date_updated` datetime NOT NULL,
  PRIMARY KEY (`album_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for `gallery_image`
-- ----------------------------
DROP TABLE IF EXISTS `gallery_image`;
CREATE TABLE `gallery_image` (
  `image_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(30) DEFAULT NULL COMMENT 'name of the image used as image ALT attribute',
  `description` varchar(100) DEFAULT NULL COMMENT 'description of the image used as image TITLE attribute',
  `visible` enum('0','1') NOT NULL DEFAULT '1',
  `date_created` datetime NOT NULL,
  `date_updated` datetime NOT NULL,
  PRIMARY KEY (`image_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for `gallery_relation`
-- ----------------------------
DROP TABLE IF EXISTS `gallery_relation`;
CREATE TABLE `gallery_relation` (
  `album_id` int(11) unsigned NOT NULL,
  `image_id` int(11) unsigned NOT NULL,
  `position` int(11) unsigned NOT NULL,
  PRIMARY KEY (`album_id`,`image_id`),
  KEY `image_id` (`image_id`),
  CONSTRAINT `gallery_relation_ibfk_1` FOREIGN KEY (`album_id`) REFERENCES `gallery_album` (`album_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `gallery_relation_ibfk_2` FOREIGN KEY (`image_id`) REFERENCES `gallery_image` (`image_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

+谢谢你的建议。所以我应该将gallery重命名为imagelist,反之亦然,对吗?从技术上讲,这是完全正确的,但为了更好地理解表名,假设它代表它存储的数据。例如,如果您有一个名为Gallery的类,它代表照片库模块和一些子类,如Gallery\u Image和Gallery\u Album,那么最好以相同的方式调用数据库表。我在这里看不到与用户的任何关系?如何将相册或照片链接到用户?@Rohit我正在使用注册表中的Rid列将用户链接到其他表,如相册、图库等。排序、排序类型如何?我看到的位置不错,但排序类似于“按日期排序”、“按名称排序”等,类型类似于升序或降序。此外,您还应该在今天的世界中添加标签标签应该是照片的标准功能。@Rohit感谢您的建议,但我不需要根据日期或其他功能进行排序,因为我并不是在创建相册。
-- ----------------------------
-- Table structure for `gallery_album`
-- ----------------------------
DROP TABLE IF EXISTS `gallery_album`;
CREATE TABLE `gallery_album` (
  `album_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL COMMENT 'name of the album',
  `description` text COMMENT 'description of the album',
  `visible` enum('0','1') NOT NULL DEFAULT '1' COMMENT 'is album visible',
  `position` int(11) unsigned NOT NULL,
  `date_created` datetime NOT NULL,
  `date_updated` datetime NOT NULL,
  PRIMARY KEY (`album_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for `gallery_image`
-- ----------------------------
DROP TABLE IF EXISTS `gallery_image`;
CREATE TABLE `gallery_image` (
  `image_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(30) DEFAULT NULL COMMENT 'name of the image used as image ALT attribute',
  `description` varchar(100) DEFAULT NULL COMMENT 'description of the image used as image TITLE attribute',
  `visible` enum('0','1') NOT NULL DEFAULT '1',
  `date_created` datetime NOT NULL,
  `date_updated` datetime NOT NULL,
  PRIMARY KEY (`image_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for `gallery_relation`
-- ----------------------------
DROP TABLE IF EXISTS `gallery_relation`;
CREATE TABLE `gallery_relation` (
  `album_id` int(11) unsigned NOT NULL,
  `image_id` int(11) unsigned NOT NULL,
  `position` int(11) unsigned NOT NULL,
  PRIMARY KEY (`album_id`,`image_id`),
  KEY `image_id` (`image_id`),
  CONSTRAINT `gallery_relation_ibfk_1` FOREIGN KEY (`album_id`) REFERENCES `gallery_album` (`album_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `gallery_relation_ibfk_2` FOREIGN KEY (`image_id`) REFERENCES `gallery_image` (`image_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;