Насколько это плохо, чтобы изменить структуру больших таблиц? - PullRequest
0 голосов
/ 24 декабря 2009

Моя целевая БД - MySQL, но давайте попробуем взглянуть на эту проблему более «обобщенно». Я собираюсь создать структуру, которая будет изменять структуры таблиц по мере необходимости. Таблицы могут содержать сотни тысяч записей в один прекрасный день. Я мог бы добавить столбец, переименовать столбец или даже изменить тип столбца (предположим, что в этом нет ничего невозможного, т. Е. Я могу изменить только числовой столбец на столбец varchar), или я также могу удалить весь столбец. Но в большинстве случаев я бы просто добавил столбцы.

Кто-то сказал мне, что это очень плохая идея. Он сказал это очень громко и ясно, но без дальнейших аргументов. Так что ты думаешь? Плохая идея? Почему?

Ответы [ 4 ]

2 голосов
/ 24 декабря 2009

В большинстве баз данных добавление и переименование столбцов являются простыми операциями, которые просто изменяют метаданные таблицы. Вы должны на самом деле убедиться, что это верно для используемого вами механизма хранения MySQL. Отбрасывание столбца тоже должно быть легким.

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

2 голосов
/ 24 декабря 2009

Это плохая идея.

У вас будут клиентские приложения, использующие эти столбцы, поэтому, когда вы переименовываете или удаляете какие-либо столбцы, вы нарушаете их код.

Иногда бывает необходимо изменить тип столбца, но это не то, что вам придется делать часто. Если столбец числовой и вы выполняете с ним вычисления, вы не можете изменить его на тип varchar. И если он вам не нужен для каких-либо вычислений и вы ожидаете нечисловые символы позже, почему бы не определить его как varchar на первом месте?

1 голос
/ 24 декабря 2009

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

1 голос
/ 24 декабря 2009

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

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

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