MySQL структура таблицы пользовательской формы - PullRequest
0 голосов
/ 06 мая 2011

В настоящее время я занимаюсь разработкой настраиваемого сценария формы , и мои пользователи смогут создавать новые поля в своих пользовательских формах.

Как сделать для этого структуру таблицы MySQL? А если вы знаете YAML, это будет полезно?

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Грубый контур ...

Таблица: пользователь

  • user_id
  • email_адрес
  • пароль

Таблица: форма

  • form_id
  • user_id
  • title
  • active

Таблица: поле

  • field_id
  • form_id
  • name
  • type

Это простая схема, основанная на одном пользователе, имеющем несколько форм,и одна форма, имеющая несколько полей.Конечно, вы можете добавить поля в эти предлагаемые поля, действительно единственные обязательные поля - это те, которые заканчиваются на "_id".

1 голос
/ 08 мая 2011
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 }

База данных MySQL, сгенерированная указанным выше YAML:

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')NEFLL по умолчанию,
field_value varchar (80) NULL по умолчанию,
первичный ключ (field_id),
ключ form_id_idx (form_id),
ограничение + 1022 * ключ иностранныйform_id) ССЫЛКИ form (form_id) НА УДАЛЕННОМ КАСКАДЕ
) ДВИГАТЕЛЬ = ДИАГРАММА ПО УМОЛЧАНИЮ InnoDB = latin1;

CREATE TABLE form (
form_id bigint (20) NOT NULL ПО УМОЛЧАНИЮ '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 CHARSET DEFAULT = latin1;

CREATE TABLE user (
user_id bigint (20) NOT NULL ПО УМОЛЧАНИЮ '0',
email varchar (80) ПО УМОЛЧАНИЮ NULL,
password varchar (80) DEFAULT NULL,
PRIMARY KEY (user_id)
) ENGINE = InnoDB CHARSET DEFAULT = latin1;

0 голосов
/ 06 мая 2011

Вы хотите, чтобы пользователи изменили структуру таблицы?Это будет означать, что вам нужно выполнить запрос на изменение MySQL, например,

 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'

Этовернет информацию обо всех столбцах в этой таблице.

Помогает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...