-1

次のように、アップロードされたファイルの詳細を保存するための MySQL テーブルがあります。

CREATE TABLE files (
    file_id bigint not null primary key auto_increment,
    file_name text,
    file_path text,
    file_extension varchar(15),
    file_link text);

ディスク上のファイルの実際の名前はfile_id、レコードを挿入するときにテーブルによって生成されたものに設定されます。そのため、あらゆる種類の詳細を記録できますが、データベースはこの時点でファイルが何と呼ばれているかを実際には認識していません。

確かにUPDATE、列を設定した直後に別のステートメントを実行するのは簡単file_linkですが、ここでもう少しエレガントなことを行う方法があるかどうか疑問に思いましたか?

私がやりたいのは、値をfile_link自動的INSERTにこれに設定することです。直後にCONCAT(file_path, file_id, file_extension)別のステートメントを実行する必要はありません。UPDATE

誰かが私がこれを行う方法を知っていますか?それが悪い考えである場合は、その理由を説明できますか?

PS違いがある場合は、PHPを使用してこれらのステートメントを実行しています。

4

2 に答える 2

2

これは、次のトリガーで実行できます。

DELIMITER $$

CREATE TRIGGER makelink BEFORE INSERT ON files
  FOR EACH ROW
    BEGIN
      SET NEW.file_link = CONCAT(NEW.file_path, NEW.file_id, NEW.file_extension);
    END;
$$

DELIMITER ;

...私は言わなければなりませんが、個人的には、SELECT挿入時にデータベースにこのようなことをさせるのではなく、ステートメントでこれを作成することに行きます.静的データを保存する方がわずかに効率的ですが、データベーススキーマの透過性が低下します.

于 2012-05-01T15:39:13.897 に答える
1

通常、派生データは保存しません。予備のサイクルがある場合は、データベースの正規化について読んでください。

于 2012-05-01T15:43:46.667 に答える