2011-08-13 15 views
0

ファイルサーバー上にあるイメージファイルを管理するデータベースをまとめています。私がデータベースの世界で初めての人なので、1つのテーブル、または2つのテーブルを使用することになります。内訳は次のとおりです。イメージデータベース - 1つのテーブルまたは2つ?

imgId, imgTitle, imgClass, imgFamilyimgURLのカラムが必要です。

imgIDと別のテーブルにimgURLを置く方が良いかどうか、または両方を1つのテーブルにまとめて機能させることができればうれしいですか?

あなたはどう思いますか?

答えて

1

あなたが言っているすべてのアイテムは、1対1の関係を持っているように見えます。

しかし、他の点としては、どのフィールドもかなり頻繁に空である可能性があるかどうかであり、多くのフィールドにはクラスがありません。たとえば、 ?

CREATE TABLE `image` (
    `imgId` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `imgTitle` varchar(255) DEFAULT NULL, 
    `imgURL` varchar(255) DEFAULT NULL, 
    `imgDate` datetime DEFAULT NULL, 
    PRIMARY KEY (`imgId`), 
    KEY `date` (`imgDate`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

CREATE TABLE `imageAddendum` (
    `imgId` int(11) NOT NULL DEFAULT '0', 
    `imgClass` varchar(255) DEFAULT NULL, 
    `imgFamily` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`imgId`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

あなたはその後になるだろう:それが事実だった場合や家族、あなたは別のテーブルにそのデータを置くとidを使用して、それにリンクし検討することもできあなたのデータはLEFT JOINを使用しているため、imageAddendumに行がなくてもイメージ内のデータを取得できます。

SELECT i.imgId, i.imgTitle, i.imgURL, i.imgDate, ia.imgClass, ia.imgFamily 
FROM image i LEFT JOIN imageAddendum ia using (imgId); 
+0

ありがとうございます。非常に有益。 – stefmikhail

+1

答えは変わらないでしょう。しかし、私は答えを編集しました;)私はそれがあなたがすべての画像のために持っているだろうと思うように、メインの '画像'テーブルに日付の列を追加し、それを注文するクエリがもっと早く。考えているのは、ちょうど日付か日時かどうかだけです。私が与えた例は日時ですが、明らかにあなたは日付だけが必要かもしれません。 – Kenny

+0

編集していただきありがとうございます。私の列を作成するためにphpMyAdminを使用しています。 KEYとは何が関係していますか?私はプライマリキーを理解していますが、KEYだけではありません。ああ、各タイプの長さ/値を定義する必要がありますか? – stefmikhail

1

かなり長い長さの文字列(最大でも数百文字)だけを保存する場合、その列を別のテーブルに分割すると大きな利点はありません。

イメージ自体(イメージを構成するバイト数)を格納する場合、多くのシステムでは、このBLOB(バイナリラージオブジェクト)を別のテーブルに格納するのが理にかなっています。

1

テーブルを分割したい主な理由は、imgIdとimgURLの間に1対1の一致がない可能性がある場合です。同じURLの2つ以上のId ;または複数のURLを参照する同じIDしかし、空のURLは大丈夫でしょう。それ以外の場合は、1つのテーブルで問題ありません。

関連する問題