2013-11-07 3 views
2

Мы хотим расширить MySQL, добавив дополнительные столбцы в каждый столбец. Сейчас у вас есть следующее.Можно ли добавить дополнительные столбцы в поля в mysql?

Field, Type, Null, Key, Default, Extra 

Мы хотим, чтобы иметь возможность добавить к определению «колонке» дополнительный столбец, как, Attributes. Наша система имеет определенные спецификации дизайна, которые нам нужно описать больше данных за «столбец». Как мы можем это сделать в MySQL?

Запрос на возврат всех столбцов выглядит следующим образом.

SHOW COLUMNS FROM MyDB.MyTable; 

EDIT 1

Я должен добавить это, чтобы начать с, и я извиняюсь за не делать этого. В настоящее время мы описываем атрибуты в разделе «Комментарии» для каждого типа столбца, и мы понимаем, что это очень грязное решение, но это было единственное, о чем мы могли подумать в то время. Мы создали генератор кода, который вращается вокруг структуры БД и является тем, что действительно вытекает из этой инициативы. Мы хотим описать атрибуты кода для столбца, чтобы генератор кода мог забрать изменения и обновить базу кода при каждом изменении или запустить.

+1

добавьте дополнительные поля в таблицу, не нарушайте mysql. «field», «field_foo», «field_bar» и т. д. ... –

+0

У MySQL нет полей. Он имеет столбцы и таблицы. Часто мировое поле используется как синоним столбца. Непонятно, что вам нужно делать здесь. –

+0

@MarcB Мы хотим присвоить атрибуты каждому столбцу в таблице. Добавление «field_foo» для «поля» повторяло бы одни и те же данные снова и снова для каждой строки. – meanbunny

ответ

3

Во-первых, терминология: «поле» и «столбец» являются в основном синонимами в этом контексте. Нет разницы между полями и столбцами. Некоторые команды MySQL даже позволяют использовать эти два слова взаимозаменяемо (например, SHOW FIELDS FROM MyDB.MyTable).

Мы хотим присвоить атрибуты каждому столбцу таблицы. Добавление «field_foo» для «поля» повторяло бы одни и те же данные снова и снова для каждой строки.

Простой ответ: Если вы хотите больше атрибутов, которые относятся к данной колонке foo, то вы должны создать еще одну таблицу, где foo является первичным ключом, так что каждая отдельная величина получает ровно одну строку. Это часть процесса database normalization. Это позволяет вам иметь атрибуты для описания заданного значения foo без повторения данных, даже если вы используете это значение много раз в своей исходной таблице.


Это звучит, как вы, возможно, также необходимо обеспечить расширяемость и вы хотите, чтобы новые столбцы в будущее время, но вы не знаете, какие столбцы или сколько сейчас. Это довольно распространенное требование к проекту.

Возможно, вас заинтересует моя презентация Extensible Data Modeling, в которой я даю обзор различных решений SQL для этого типа проблем.

  • Дополнительные столбцы
  • Entity-Attribute-Value
  • Таблица Class Наследование
  • Serialized LOB
  • Перевернутые Индексы
  • Online Изменения схемы
  • Non-реляционные базы данных

Ни одно из этих решений не является надежным, у каждого есть свои сильные и слабые стороны. Поэтому стоит узнать обо всех них, а затем решить, какие из них имеют сильные стороны, которые имеют значение для вашего конкретного проекта, в то время как их слабости - это то, что вам неудобно (это процесс принятия решений для многих вариантов выбора программного обеспечения).


В настоящее время мы с описанием атрибутов в разделе комментариев для каждого типа столбца

Так вы используете что-то вроде решения «Serialized LOB».

+0

Что такое Entity-Attribute-Value на сайте? Это похоже на то, что мы хотим сделать. – meanbunny

+1

@meanbunny, прежде чем использовать EAV, прочитайте эту статью: [Bad CaRMa] (http://www.simple-talk.com/opinion/opinion-pieces/bad-carma/). –

+0

Сначала мы создали другую таблицу для дополнительных свойств, относящихся к объекту, но в ситуации реального объекта мы хотели максимально упростить структуру БД. Отсюда и стремление расширить MySQL. Я собираюсь прочитать статьи, которые вы опубликовали сейчас. – meanbunny

Смежные вопросы