【问题标题】:MySQL table structure of a custom form自定义表格的MySQL表结构
【发布时间】:2011-08-20 00:53:59
【问题描述】:

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

如何为它制作一个MySQL表结构?如果你知道 YAML 会有所帮助吗?

【问题讨论】:

    标签: php mysql yaml custom-fields


    【解决方案1】:

    粗略的轮廓...

    表:用户

    • user_id
    • 电子邮件地址
    • 密码

    表格:表格

    • form_id
    • user_id
    • 标题
    • 有效

    表格:字段

    • field_id
    • form_id
    • 姓名
    • 类型

    这是一个简单的架构,基于一个用户拥有多个表单,一个表单拥有多个字段。当然,您可以在这些建议的字段中添加字段,实际上唯一必要的字段是以“_id”结尾的字段。

    【讨论】:

    • 谢谢卢卡诺斯,这给了我一个想法。
    【解决方案2】:
    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') 默认NULL,
    field_value varchar(80) 默认NULL,
    主键 (field_id),
    form_id_idx (form_id),
    约束 field_form_id_form_form_id 外键 (form_id) 引用 form (form_id) 删除级联
    ) ENGINE=InnoDB 默认字符集=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',
    主键 (form_id),
    user_id_idx (user_id),
    约束 form_user_id_user_user_id 外键 (user_id) 引用 user (user_id) 删除级联
    ) ENGINE=InnoDB 默认字符集=latin1;

    创建表user (
    user_id bigint(20) NOT NULL DEFAULT '0',
    email varchar(80) DEFAULT NULL,
    password varchar(80) DEFAULT空,
    主键 (user_id)
    ) ENGINE=InnoDB 默认字符集=latin1;

    【讨论】:

    【解决方案3】:

    您希望 用户 更改表结构吗?这意味着您需要执行 mysql alter 查询,可能像

     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'
    

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

    这有帮助吗?

    【讨论】:

    • 不,我不需要用户更改表结构。我的意思是可定制的表格。虽然感谢吉姆!我的领域总是欢迎任何建议。
    猜你喜欢
    • 2013-06-22
    • 2016-07-11
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多