我将为图片库创建一个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。
我创建了这三个表,但我觉得表结构有问题。有人能指出我正确的方向吗?
答案 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;