2010-12-12 7 views
0

画像ギャラリー用の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という名前の写真がある場合、ユーザーはピクチャA、B、Cを含むa1という名前のアルバムを作成できます。

私はこの3つのテーブルを作成しましたが、テーブル構造に何か問題があると感じています。誰かが私を正しい方向に向けることができますか?

+0

私はここで、ユーザへの関係を参照してくださいいけませんか?アルバムや写真をどのようにしてユーザーにリンクしていますか? – Rohit

+0

@Rohit私は、アルバム、ギャラリーなどのような他のテーブルにユーザーをリンクするための登録テーブルからRid列を使用しています – 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のようなサブクラスを表すClassという名前のクラスがある場合、データベーステーブルを同じように呼び出すことをお勧めします。 – Nazariy

+0

もう一度、ありがとうございます。 :) – Searock