2010-12-12 66 views
0

Je vais créer une application web pour la galerie de photos.Configurer mes tableaux Galerie de photos

Voici comment j'ai créé mes tables de base de données. (J'ai exclu le reste des tables inutiles.)

 
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. 

Mais pour une raison quelconque, je pense que la structure de ces tables est erronée. Mon exigence est que l'utilisateur devrait être capable de créer différents albums à partir de la table de la galerie. Par exemple, s'il y a des images nommées A, B, C, D., l'utilisateur devrait être capable de créer un album nommé a1 qui contient les images A, B, C; album a2 qui contient des images A, B, D.

J'ai créé ces trois tables, mais je pense qu'il y a quelque chose qui ne va pas dans la structure de la table. Quelqu'un peut-il me diriger dans une bonne direction?

+0

Je ne vois aucune relation avec l'utilisateur ici? Comment reliez-vous un album ou une photo à un utilisateur? – Rohit

+0

@Rohit J'utilise la colonne Rid de la table Registration pour lier l'utilisateur à d'autres tables comme un album, une galerie etc – Searock

+0

Qu'en est-il du tri, du type de tri? Je vois la position qui est bonne mais le sort est comme "trier par date", "trier par nom" etc et le type est comme croissant ou décroissant. Aussi, vous devriez ajouter des balises Dans le monde d'aujourd'hui, le marquage devrait être une caractéristique standard pour les photos. – Rohit

Répondre

2

Je n'appellerais pas une table avec des images une galerie car cela peut signifier un album. De mon point de vue, le schéma de la base de données n'est correct que si je change de table ImageList car Iid n'est pas nécessaire, Aide et Gid supposent être un index unique, j'ajouterais aussi un champ pour stocker l'ordre des images dans l'album, en mode InnoDB.

Voici exemple de schéma de base de données:

-- ---------------------------- 
-- 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 merci pour la suggestion. Donc je devrais renommer la galerie à l'imagiste et vice versa, non? – Searock

+0

techniquement tout est correct, mais pour mieux comprendre le nom de la table suppose représenter les données qu'il stocke. Si par exemple vous avez une classe nommée Gallery qui représente un module de galerie de photos et certaines sous-classes comme Gallery_Image et Gallery_Album, il serait judicieux d'appeler les tables de base de données de la même manière. – Nazariy

+0

Encore une fois, merci beaucoup. :) – Searock