2010-12-12 2 views
0

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

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

 
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

Я не вижу никакого отношения к пользователю здесь? Как вы связываете альбом или фотографию с пользователем? – Rohit

+0

@Rohit Я использую Rid column из регистрационной таблицы для привязки пользователя к другим таблицам, таким как альбом, галерея и т. Д. – Searock

+0

Как насчет сортировки, типа сортировки? Я вижу позицию, которая хороша, но сортировка похожа на «сортировать по дате», «сортировать по имени» и т. Д., И тип похож на восходящий или нисходящий. Также вы должны добавить теги. В сегодняшнем мире пометка должна быть стандартной функцией для фотографий. – Rohit

ответ

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; 
+0

+1 спасибо за предложение. Поэтому я должен переименовать галерею в imagelist и наоборот, не так ли? – Searock

+0

технически все это правильно, но для лучшего понимания имени таблицы предположите, что они хранят данные. Если, например, у вас есть класс с именем Галерея, который представляет модуль фотогалереи и некоторые подкласс, такие как Gallery_Image и Gallery_Album, было бы разумно вызвать таблицы базы данных одинаково. – Nazariy

+0

Опять же, большое спасибо. :) – Searock

Смежные вопросы