2


2

私はファイルに関する情報だけを含むテーブルを持っているので、ファイルパスは一意であり、どんなエントリでも識別できるので、私は主キーとしてそれを使うべきだと思いました。

とはいえ、キーの長さを指定する必要があるなど、いくつか問題があります(エラー1170)。 私は何をすべきか? 整数を主キーとして使用し、ファイル 'x’の情報にアクセスする必要があるたびに、 "where FilePath = x"を実行しますか。

時間を割いて私の質問を読んでくれてありがとう。

4 Answer


4


ほとんどのデータベースでは、深いファイルパスを格納するのに十分な長さの文字列カラムのインデックスを作成するのは非効率的です(不可能でさえありません)。 これは代理キーを使用するのに良い状況です。

別のオプションは、 `+ MD5()+`などの安価なハッシュ関数を使用してファイルパスから固定長ハッシュを計算することです(MD5はパスワードに使用するには十分ではありませんが、入力が与えられると一意性を確保するには十分に強力です)この場合のデータ)。


3


intを主キーとして使用し、ファイルパスのフィールドにUniqueを入力します。

CREATE TABLE `cms`.`test`(` id` INT(32)NOT NULL AUTO_INCREMENT PRIMARY KEY、 `filepath` VARCHAR(255)NOT NULL、UNIQUE(` filepath`))ENGINE = MYISAM


1


ファイルパスの最大長を指定して列をvarcharに変更できますか?

http://www.mydigitallife.info/2007/07/09/mysql-error-1170-42000-blobtext-column-used-in-key-specification-without-a-key-length/ [この記事では、エラーについて説明しています]。 基本的に、テキストやBLOB列にキーを配置することはできません。キーは一意性をチェックするのに必要な長さを必要とするからです。 しかし、textカラムとblobカラムは長さをサポートしません。 だからあなたはそれらを鍵に使うことはできない。

それ以降のバージョンのMySQLでは、Varchar列は最大65K文字まで可能です。

_ VARCHAR列の値は可変長文字列です。 長さはMySQL 5.0.3以前では0から255まで、5.0.3以降のバージョンでは0から65,535までの値として指定できます。 MySQL 5.0.3以降でのVARCHARの有効最大長は、最大行サイズ(65,535バイト、これはすべての列で共有されます)および使用される文字セットによって異なります。 _


1


自然キー(ファイルパス/名前)を使用しない代理キー(int)を使用する

主キーをINTにして、任意のパスを設定します 長い文字列をキーとして使用したり、他のテーブルの外部キーとして使用したりするのは遅くなります。

ファイル名をパスから分割したり、パスの一部だけを保存したりすることができます。 パスの主ルートは、データベースの部分パスファイル名に追加する設定です。

ファイル情報を保存するときは、名前を保存するだけです。パスは他のデータ(関連アイテム(注文、インシデント、仕事など))に基づいて作成され、その他のデータのIDなどが含まれます