我目前正在开发一个可自定义的表单脚本,我的用户将能够在他们的自定义表单中创建新字段。
如何为它制作一个 MySQL 表结构?如果您知道 YAML,会有所帮助吗?
我目前正在开发一个可自定义的表单脚本,我的用户将能够在他们的自定义表单中创建新字段。
如何为它制作一个 MySQL 表结构?如果您知道 YAML,会有所帮助吗?
粗略的轮廓...
这是一个简单的模式,基于一个用户有多个表单,一个表单有多个字段。当然,您可以在这些建议的字段中添加字段,实际上唯一重要的字段是以“_id”结尾的字段。
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_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
),
KEYform_id_idx
(form_id
),
CONSTRAINTfield_form_id_form_form_id
FOREIGN KEY (form_id
) REFERENCESform
(form_id
) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE
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
),
KEYuser_id_idx
(user_id
),
CONSTRAINTform_user_id_user_user_id
FOREIGN KEY (user_id
) 参考user
(user_id
) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;CREATE TABLE
user
(
user_id
bigint(20) NOT NULL DEFAULT '0',
password
varchar(80) DEFAULT NULL,
PRIMARY KEY (user_id
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
您是否希望用户更改表结构?这意味着你需要执行一个 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'
这将返回有关此表中所有列的信息。
这有帮助吗?