Php 自定义表单的MySQL表结构

Php 自定义表单的MySQL表结构,php,mysql,yaml,custom-fields,Php,Mysql,Yaml,Custom Fields,我目前正在开发一个可定制表单脚本,我的用户将能够在自定义表单中创建新字段 如何为其创建MySQL表结构?如果你知道YAML,它会很有帮助吗?一个大概的轮廓 表:用户 用户id 电子邮件地址 密码 表:表格 表格编号 用户id 头衔 活跃的 表:字段 字段id 表格编号 名字 类型 这是一个简单的模式,一个用户有多个表单,一个表单有多个字段。当然,您可以将字段添加到这些建议的字段中,实际上唯一重要的字段是以“_id”结尾的字段。一个粗略的轮廓 表:用户 用户id 电子邮件地址 密码

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

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

一个大概的轮廓

表:用户
  • 用户id
  • 电子邮件地址
  • 密码
表:表格
  • 表格编号
  • 用户id
  • 头衔
  • 活跃的
表:字段
  • 字段id
  • 表格编号
  • 名字
  • 类型
这是一个简单的模式,一个用户有多个表单,一个表单有多个字段。当然,您可以将字段添加到这些建议的字段中,实际上唯一重要的字段是以“_id”结尾的字段。

一个粗略的轮廓

表:用户
  • 用户id
  • 电子邮件地址
  • 密码
表:表格
  • 表格编号
  • 用户id
  • 头衔
  • 活跃的
表:字段
  • 字段id
  • 表格编号
  • 名字
  • 类型

这是一个简单的模式,一个用户有多个表单,一个表单有多个字段。当然,您可以将字段添加到这些建议的字段中,实际上唯一重要的字段是以“_id”结尾的字段。

是否希望用户更改表结构?这意味着您需要执行一个mysql alter查询,可能类似于

 ALTER TABLE the_table DROP COLUMN one_column

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

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

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.Columns
WHERE table_name = 'the_table'
这将返回有关此表中所有列的信息


这有帮助吗?

是否希望用户更改表结构?这意味着您需要执行一个mysql alter查询,可能类似于

 ALTER TABLE the_table DROP COLUMN one_column
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 }

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

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

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.Columns
WHERE table_name = 'the_table'
这将返回有关此表中所有列的信息

这有用吗

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\u id
bigint(20)不为空默认值“0”,
form_id
bigint(20)不为空,
field\u name
varchar(80)默认为空,
字段类型
enum('String','Integer','Float','LongText','Boolean')默认为空,
field\u value
varchar(80)默认为空,
主键(
字段id
),
表单id\u idx
表单id
),
约束
字段表单id\u表单id
外键(
表单id
)引用删除级联上的
表单(
表单id
) )ENGINE=InnoDB默认字符集=1

创建表格
表单

form_id
bigint(20)非空默认值“0”,
user\u id
bigint(20)不为空,
title
varchar(80)默认为空,
处于活动状态
tinyint(1)不为空默认值“1”,
主键(
form_id
),
user\u id\u idx
user\u id
),
约束
form\u user\u id\u user\u id
外键(
user\u id
)在删除级联上引用
user
user\u id
) )ENGINE=InnoDB默认字符集=1

创建表
用户

user\u id
bigint(20)非空默认值“0”,
email
varchar(80)默认为空,
password
varchar(80)默认为空,
主键(
user\u id

)ENGINE=InnoDB默认字符集=1

上述YAML生成的MySQL数据库:

创建表
字段

field\u id
bigint(20)不为空默认值“0”,
form_id
bigint(20)不为空,
field\u name
varchar(80)默认为空,
字段类型
enum('String','Integer','Float','LongText','Boolean')默认为空,
field\u value
varchar(80)默认为空,
主键(
字段id
),
表单id\u idx
表单id
),
约束
字段表单id\u表单id
外键(
表单id
)引用删除级联上的
表单(
表单id
) )ENGINE=InnoDB默认字符集=1

创建表格
表单

form_id
bigint(20)非空默认值“0”,
user\u id
bigint(20)不为空,
title
varchar(80)默认为空,
处于活动状态
tinyint(1)不为空默认值“1”,
主键(
form_id
),
user\u id\u idx
user\u id
),
约束
form\u user\u id\u user\u id
外键(
user\u id
)在删除级联上引用
user
user\u id
) )ENGINE=InnoDB默认字符集=1

创建表
用户

user\u id
bigint(20)非空默认值“0”,
email
varchar(80)默认为空,
password
varchar(80)默认为空,
主键(
user\u id

)ENGINE=InnoDB默认字符集=1


不,我不需要用户更改表结构。我指的是可定制的表单。谢谢你,吉姆!在我的领域里,任何建议都是受欢迎的。不,我不需要用户改变表结构。我指的是可定制的表单。谢谢你,吉姆!在我的领域里,任何建议都是受欢迎的。谢谢你Lucanos,它给了我一个想法。谢谢你Lucanos,它给了我一个想法。我想,你只在schema(或st