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