设置我的图片库表

时间:2010-12-12 17:39:47

标签: mysql sql constraints implementation

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

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

Gallery
Gid    -> Primary key.  
Rid    -> Foreign key from register table.  
Name   -> Name of the image.  
Url    -> Location of image.   
Status -> Enabled or disabled.

Album
Aid    -> Primary key.   
Name   -> Name of the album.

Imagelist  
Iid    -> Primary key.
Aid    -> Foreign key from Album table.  
Gid    -> Foreign key from Gallery table.

但由于某种原因,我觉得这些表的结构是错误的。我的要求是用户应该能够从图库表创建不同的专辑。

例如,如果有名为A,B,C,D的图片,那么用户应该能够创建名为a1的专辑,其中包含图片A,B,C;专辑a2,其中包含图片A,B,D。

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

1 个答案:

答案 0 :(得分:2)

我不会把图片称为图库,因为它可能意味着专辑。从我的观点来看,数据库模式是正确的,我唯一要改变的是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;