0

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

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

4

3 回答 3

2

粗略的轮廓...

表:用户

  • 用户身份
  • 电子邮件地址
  • 密码

表:表格

  • form_id
  • 用户身份
  • 标题
  • 积极的

表:字段

  • field_id
  • form_id
  • 姓名
  • 类型

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

于 2011-05-06T09:22:48.163 回答
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 数据库:

CREATE TABLE field(
field_idbigint(20) NOT NULL DEFAULT '0',
form_idbigint(20) NOT NULL,
field_namevarchar(80) DEFAULT NULL,
field_typeenum('String','Integer','Float','LongText','Boolean') DEFAULT NULL,
field_valuevarchar(80) DEFAULT NULL,
PRIMARY KEY ( field_id),
KEY form_id_idx( form_id),
CONSTRAINT field_form_id_form_form_idFOREIGN KEY ( form_id) REFERENCES form( form_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE form(
form_idbigint(20) NOT NULL DEFAULT '0',
user_idbigint(20) NOT NULL,
titlevarchar(80) DEFAULT NULL,
is_activetinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY ( form_id),
KEY user_id_idx( user_id),
CONSTRAINT form_user_id_user_user_idFOREIGN KEY ( user_id) 参考user( user_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE user(
user_idbigint(20) NOT NULL DEFAULT '0',
emailvarchar(80) DEFAULT NULL,
passwordvarchar(80) DEFAULT NULL,
PRIMARY KEY ( user_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

于 2011-05-08T03:37:41.187 回答
0

您是否希望用户更改表结构?这意味着你需要执行一个 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'

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

这有帮助吗?

于 2011-05-06T09:30:43.107 回答