0

現在、カスタマイズ可能なフォームスクリプトを開発しており、ユーザーはカスタム フォームに新しいフィールドを作成できるようになります。

そのためのMySQLテーブル構造を作成する方法は? そして、YAML を知っていれば役に立ちますか?

4

3 に答える 3

2

大まかな概要...

テーブル:ユーザー

  • ユーザーID
  • 電子メールアドレス
  • パスワード

表:フォーム

  • form_id
  • ユーザーID
  • タイトル
  • アクティブ

テーブル:フィールド

  • field_id
  • form_id
  • 名前
  • タイプ

これは、複数のフォームを持つ1人のユーザーと、複数のフィールドを持つ1つのフォームに基づく単純なスキーマです。もちろん、これらの提案されたフィールドにフィールドを追加することもできます。実際には、必須フィールドは「_id」で終わるフィールドだけです。

于 2011-05-06T09:22:48.163 に答える
1
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),
KEY form_id_idx( form_id),
CONSTRAINT field_form_id_form_form_idFOREIGN KEY ( form_id) REFERENCES form( 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),
KEY user_id_idx( user_id),
CONSTRAINT form_user_id_user_user_idFOREIGN KEY ( user_id) REFERENCES user( user_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE user(
user_idbigint(20) NOT NULL DEFAULT '0',
emailvarchar(80) DEFAULT NULL,
passwordvarchar(80) DEFAULT NULL,
PRIMARY KEY ( user_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

于 2011-05-08T03:37:41.187 に答える
0

ユーザーにテーブル構造を変更してもらいたいですか?これは、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'

これにより、このテーブルのすべての列に関する情報が返されます。

これは役に立ちますか?

于 2011-05-06T09:30:43.107 に答える