MySQL表结构的自定义表单

时间:2011-05-06 09:15:32

标签: php mysql yaml custom-fields

我目前正在开发一个可自定义的表单脚本,我的用户将能够在自定义表单中创建新字段。

如何为它创建MySQL表结构?如果你知道YAML,那会有帮助吗?

3 个答案:

答案 0 :(得分:2)

粗略概述......

表:用户

  • USER_ID
  • EMAIL_ADDRESS
  • 密码

表:表格

  • form_id
  • USER_ID
  • 标题
  • 活性

表:字段

  • FIELD_ID
  • form_id
  • 名称

这是一个基于具有多个表单的一个用户和一个具有多个字段的表单的简单模式。当然,您可以向这些建议字段添加字段,实际上唯一必要的字段是以“_id”结尾的字段。

答案 1 :(得分: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数据库:

  

创建表field
        field_id bigint(20)NOT NULL DEFAULT'0',
        form_id bigint(20)NOT NULL,
        field_name varchar(80)DEFAULT NULL,
        field_type enum('String','Integer','Float','LongText','Boolean')DEFAULT NULL,
        field_value varchar(80)DEFAULT NULL,
        PRIMARY KEY(field_id),
        KEY form_id_idxform_id),
        约束field_form_id_form_form_id FOREIGN KEY(form_id)引用formform_id)删除CASCADE
     )ENGINE = InnoDB DEFAULT CHARSET = latin1;

     

创建表form
        form_id bigint(20)NOT NULL DEFAULT'0',
        user_id bigint(20)NOT NULL,
        title varchar(80)DEFAULT NULL,
        is_active tinyint(1)NOT NULL DEFAULT'1',
        PRIMARY KEY(form_id),
        KEY user_id_idxuser_id),
        约束form_user_id_user_user_id FOREIGN KEY(user_id)引用useruser_id)删除CASCADE
     )ENGINE = InnoDB DEFAULT CHARSET = latin1;

     

创建表user
        user_id bigint(20)NOT NULL DEFAULT'0',
        email varchar(80)DEFAULT NULL,
        password varchar(80)DEFAULT NULL,
        主要关键(user_id
     )ENGINE = InnoDB DEFAULT CHARSET = latin1;

答案 2 :(得分:0)

您希望用户更改表格结构吗?这意味着你需要执行一个mysql alter query,可能就像

一样
 ALTER TABLE the_table DROP COLUMN one_column

 ALTER TABLE the_table ADD COLUMN another_column

并且您希望在执行此查询之前将其包装在检查表结构的内容中。运行alter table查询后,您就可以进行数据管理了。

我认为在更改表结构之前检查表结构的最佳方法是查看系统表

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.Columns
WHERE table_name = 'the_table'

这将返回有关此表中所有列的信息。

这有帮助吗?