Настройка таблиц моей галереи изображений - PullRequest
0 голосов
/ 12 декабря 2010

Я собираюсь создать веб-приложение для галереи изображений.

Так вот, как я создал свои таблицы базы данных.(Я исключил остальные ненужные таблицы.)

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

<b>Album</b>
Aid    -> Primary key.   
Name   -> Name of the album.

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

Но по некоторым причинам я чувствую, что структура этих таблиц неверна.Мое требование: пользователь должен иметь возможность создавать разные альбомы из таблицы галереи.

Например, если есть изображения с именами A, B, C, D., тогда пользователь должен иметь возможность создавать альбом с именем a1, который содержит изображенияА, В, С;альбом a2, который содержит изображения A, B, D.

Я создал эти три таблицы, но чувствую, что в структуре таблицы что-то не так.Может ли кто-нибудь указать мне правильное направление?

1 Ответ

2 голосов
/ 12 декабря 2010

Я бы не назвал таблицу с изображениями галереей, поскольку это может означать альбом для. С моей точки зрения, схема базы данных является правильной, единственное, что я хотел бы изменить, это таблица 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;
...