現在、カスタマイズ可能なフォームスクリプトを開発しており、ユーザーはカスタム フォームに新しいフィールドを作成できるようになります。
そのためのMySQLテーブル構造を作成する方法は? そして、YAML を知っていれば役に立ちますか?
現在、カスタマイズ可能なフォームスクリプトを開発しており、ユーザーはカスタム フォームに新しいフィールドを作成できるようになります。
そのためのMySQLテーブル構造を作成する方法は? そして、YAML を知っていれば役に立ちますか?
大まかな概要...
これは、複数のフォームを持つ1人のユーザーと、複数のフィールドを持つ1つのフォームに基づく単純なスキーマです。もちろん、これらの提案されたフィールドにフィールドを追加することもできます。実際には、必須フィールドは「_id」で終わるフィールドだけです。
User:
columns:
user_id: { type: integer, primary: true, notnull: true }
email: { type: string(80) }
password: { type: string(80) }
Form:
columns:
form_id: { type: integer, primary: true, notnull: true }
user_id: { type: integer, notnull: true }
title: { type: string(80) }
is_active: { type: boolean, notnull: true, default: 1 }
relations:
User: { onDelete: CASCADE, local: user_id, foreign: user_id, foreignAlias: Forms }
Field:
columns:
field_id: { type: integer, primary: true, notnull: true }
form_id: { type: integer, notnull: true }
field_name: { type: string(80) }
field_type: { type: enum, values: [ String, Integer, Float, LongText, Boolean] }
field_value: { type: string(80) }
relations:
Form: { onDelete: CASCADE, local: form_id, foreign: form_id, foreignAlias: Fields }
上記の YAML によって生成された MySQL データベース:
CREATE TABLE
field(
field_idbigint(20) NOT NULL DEFAULT '0',
form_idbigint(20) NOT NULL,
field_namevarchar(80) DEFAULT NULL,
field_typeenum('String','Integer','Float','LongText','Boolean') DEFAULT NULL,
field_valuevarchar(80) DEFAULT NULL,
PRIMARY KEY (field_id),
KEYform_id_idx(form_id),
CONSTRAINTfield_form_id_form_form_idFOREIGN KEY (form_id) REFERENCESform(form_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE
form(
form_idbigint(20) NOT NULL DEFAULT '0',
user_idbigint(20) NOT NULL,
titlevarchar(80) DEFAULT NULL,
is_activetinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (form_id),
KEYuser_id_idx(user_id),
CONSTRAINTform_user_id_user_user_idFOREIGN KEY (user_id) REFERENCESuser(user_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE
user(
user_idbigint(20) NOT NULL DEFAULT '0',
passwordvarchar(80) DEFAULT NULL,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ユーザーにテーブル構造を変更してもらいたいですか?これは、mysqlの変更クエリを実行する必要があることを意味します。
ALTER TABLE the_table DROP COLUMN one_column
また
ALTER TABLE the_table ADD COLUMN another_column
そして、このクエリを実行する前に、テーブル構造をチェックするものでこれをラップする必要があります。テーブル変更クエリを実行すると、データ管理を実行できます。
変更する前にテーブル構造を確認する最良の方法は、システムテーブルを表示することだと思います
SELECT table_name, column_name, is_nullable, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.Columns
WHERE table_name = 'the_table'
これにより、このテーブルのすべての列に関する情報が返されます。
これは役に立ちますか?