Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MySQL > Как безболезненно проверить наличие в столбца? |
Автор: =Женек= 24.4.2009, 12:48 |
Есть таблица, каждый месяц к ней будет добавляться столбец, с именем, содержащим текущий месяц и год. Каким запросом проверить, есть ли столбец с таким именем, чтобы не генерировалась ошибка, а чтобы например, в случае отсутствия такового mysql возвращал ноль или что-то в этом роде? |
Автор: azesmcar 24.4.2009, 12:54 | ||||
![]()
|
Автор: DimW 24.4.2009, 12:54 |
чем вызвана необходимость добавления поля каждый месяц? |
Автор: =Женек= 24.4.2009, 13:02 |
Потому как каждый месяц записываются данные из двумерного массива и создавать таблицу на каждый месяц неохота. Я выстроил двумерную таблицу по рядам. |
Автор: DimW 24.4.2009, 13:05 |
вам не кажется, что это как то не сочитается с реляционной моделью? |
Автор: =Женек= 24.4.2009, 13:05 |
show columns from oet_balls where name='d200904' - выдало ошибку #1054 - Unknown column 'name' in 'where clause' |
Автор: azesmcar 24.4.2009, 13:09 | ||
не name а Field |
Автор: =Женек= 24.4.2009, 13:10 |
DimW, объясняю задачу. В учреждении работают эксперты и лаборанты. Их труд оценивается в баллах. Причем закрепленности сотрудников друг за другом нет - все работают со всеми. Итог работы - таблица - по горизонтали эксперты, по вертикали лаборанты, в ячейках баллы каждого эксперта с каждым лаборантом. А еще хочется каждый месяц добавлять в таблицу новые данные, сохраняя старые. По совету людей на этом же форуме я сделал таблицу с полями: laborant expert d200904 в соответствии со всеми возможными сочетаниями экспертов и лаборантов добавляю строки: Э1---Л1 10 Э1--Л2 20 Э2--Л1 25 Э2--Л2 30 Критикуйте, как хотите, но программа уже написана и отлично работает. Осталось добавить внесение данных с добавлением нового столбца. |
Автор: azesmcar 24.4.2009, 13:10 |
а вообще горизонтальное расширение таблиц - это извращенство ![]() лучше добавить колонку DATE |
Автор: DimW 24.4.2009, 13:25 |
=Женек=, связь многие ко многим организуется другим образом. если критика в ваш адрес неуместна, то не буду вас переубеждать. |
Автор: =Женек= 24.4.2009, 14:00 |
Да почему же, буду рад критике. Объясните, каким образом правильно, на будущее. |
Автор: =Женек= 24.4.2009, 15:41 |
DimW, а в чем отличие того что предложили вы от того, как сделал я? (см. описание выше) И где трехмерность, то бишь баллы для разных дат? Таблица, которую вы создали будет относительно нехилая (в нашем учреждении в одном только отделе получится 221 ряд в таблице), а если добавить столбец date, то каждый месяц придется прибавлять по 221 записи с практически дублирующим содержимым (лаборант и эксперт). Если же расширять таблицу добавлением колонок, то добавляется всего одна колонка с цифрами. |
Автор: azesmcar 24.4.2009, 15:59 | ||
Нехилая таблица - это таблица в пару террабайт..а ваша таблица - самая обыкновенная.. повторяющиеся данные можно выделить в отдельную таблицу и связать через какой нибудь идентификатор |
Автор: DimW 24.4.2009, 16:20 | ||||||
периоды я бы организовал отдельной сущностью:
и в таблицу ЭКСПЕРТ_ЛАБОРАНТ добавил id_period:
=Женек=, вы бы лучше подумали как потом отчетность строить будите по своей структуре чем беспокоеться о такой ерунде:
|
Автор: DimW 24.4.2009, 16:35 | ||
отличие в том что в моем случае реализована реляционная модель, а вашем непонятно что. если потребуется отчет за период то в моем случае это будет выглядеть так:
в вашем случае пришлось бы для каждого периода делать отдельный отчет ибо период реализован отдельным полем, неговоря уже об отчете за несколько периодов. разницу уловили? |
Автор: =Женек= 24.4.2009, 17:18 |
Зачем периоды отдельной сущностью? Вроде бы как-то мождно записывать тип date чтобы он содержал только год и месяц... |
Автор: Bikutoru 24.4.2009, 17:23 | ||||
Если еще актуально:
Хотя, имхо, добавлять колонку каждый месяц - плохая идея. Добавлено через 3 минуты и 55 секунд http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html Еще одна причина НЕ добавлять колонки каждый месяц:
При большом количестве колонок (а их может быть не больше 4096 или 1000 в InnoDB) этого может не хватить |
Автор: DimW 24.4.2009, 17:31 |
это дело вкуса, в данном конкретном случае можно обойтись и добавлением поля, но представте что в будущем у вас появится еще сущность которая должна ограничиваться рамками того же приода что и лаборанты, эксперты, в этом случае сущность ПЕРИОД будет кстати. |