ファイルに関する情報のみを含むテーブルがあるので、ファイルパスは一意であり、任意のエントリを識別できるため、主キーとして使用する必要があると思いました。
ただし、キーの長さを指定する必要があるなど、いくつかの問題があります(エラー1170)。私は何をすべきか?主キーとして整数を使用し、ファイル'x'の情報にアクセスする必要があるたびに、 "where FilePath = x"を実行しますか?
私の質問を読んで時間を割いてくれてありがとう。
ファイルに関する情報のみを含むテーブルがあるので、ファイルパスは一意であり、任意のエントリを識別できるため、主キーとして使用する必要があると思いました。
ただし、キーの長さを指定する必要があるなど、いくつかの問題があります(エラー1170)。私は何をすべきか?主キーとして整数を使用し、ファイル'x'の情報にアクセスする必要があるたびに、 "where FilePath = x"を実行しますか?
私の質問を読んで時間を割いてくれてありがとう。
ほとんどのデータベースでは、深いファイル パスを格納するのに十分な長さの文字列列のインデックスを作成することは非効率的 (または不可能) です。これは、代理キーを使用するのに適した状況です。
別のオプションは、次のような安価なハッシュ関数を使用して、ファイル パスから固定長のハッシュを計算することですMD5()
(ただし、MD5 はパスワードに使用するほど強力ではありませんが、この場合、与えられた入力データの一意性を保証するには十分強力です)。
intを主キーとして使用し、ファイルパスのフィールドにUniqueを入力します。
CREATE TABLE `cms`.`test` (
`id` INT( 32 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`filepath` VARCHAR( 255 ) NOT NULL ,
UNIQUE (
`filepath`
)
) ENGINE = MYISAM
ファイルパスの最大長を指定して、列をvarcharに変更できますか?
この記事ではエラーについて説明します。基本的に、キーは一意性をチェックするための長さが必要なため、テキストまたはblob列にキーを配置することはできません。ただし、テキスト列とblob列は長さをサポートしていません。したがって、キーでそれらを使用することはできません。
それ以降のバージョンのMySQLでは、Varchar列は最大65K文字になる可能性があります
VARCHAR列の値は可変長の文字列です。長さは、MySQL 5.0.3以前は0〜255、5.0.3以降のバージョンでは0〜65,535の値として指定できます。MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(65,535バイト、すべての列で共有される)と使用される文字セットの影響を受けます。
自然キー (ファイル パス/名前) を使用しないでください。代理キー (int) を使用してください。
主キーをINTにし、パスとファイルを別の列に入れます。長い文字列をキーとして、および/または他のテーブルの外部キーとして持つと時間がかかります。
パスからファイル名を分割したり、パスの一部のみを保存したりしたい場合があります。パスのメイン ルートは、データベースの部分パス + ファイル名に追加する構成設定である可能性があります。
ファイル情報を保存するときは、名前を保存するだけで、パスは他のデータに基づいて作成されます: 関連するアイテム (注文、インシデント、ジョブなど) とその他のデータの ID など...