powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Предусмотреть возможность добавления полей
25 сообщений из 31, страница 1 из 2
Предусмотреть возможность добавления полей
    #35090607
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35090610
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Промахнулся с кнопкой :-(

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

Например, есть таблица sites. В ней: name, url, lang, country. Заказчик в будущем может захотеть добавить ещё несколько полей (связать их с конкретным site_id): email для контактов, персона для контактов и т. д. Т. е. мне нужно как-то хранить имена добавленным полей и данные в них.

Как это правильно сделать?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35090658
Roman V TchemisovПромахнулся с кнопкой :-(

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

Например, есть таблица sites. В ней: name, url, lang, country. Заказчик в будущем может захотеть добавить ещё несколько полей (связать их с конкретным site_id): email для контактов, персона для контактов и т. д. Т. е. мне нужно как-то хранить имена добавленным полей и данные в них.

Как это правильно сделать?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
Как-как... Да очень просто: сделать свою IDE (типа Акцесса). Пользователь видит описание таблицы и может добавить/удалить поля. Для этого необходимо иметь описание всех таблиц Вашей БД, связей между ними, используемых триггеров и ограничений (констрэйнтов) и т.д. В общем, всё это называется метаданными...
Когда пользователь нажмет на кнопку "Сохранить изменения", то IDE создаст новую таблицу (с измененной структурой), перекопирует туда данные (если есть) из старой таблицы, перенастроит существующие связи на новую таблицу и удалит старую таблицу. Естественно, что надо проверять работает ли кто-то с таблицей (блокированы записи/таблица или нет). Если кто-то работает, то модификация структуры должна быть отклонена...

Геморройно? Да! Но если того хочет заказчик....
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35090711
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
Станислав С...кий Roman V TchemisovКак это правильно сделать?

сделать свою IDE (типа Акцесса)

например www.simple-soft.ru (CookBook example)
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35090965
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кий Roman V TchemisovВопрос в том, что заказчик хочет иметь возможность добавлять в будущем свои поля (а также сортировать результаты по этим полям).

Например, есть таблица sites. В ней: name, url, lang, country. Заказчик в будущем может захотеть добавить ещё несколько полей (связать их с конкретным site_id): email для контактов, персона для контактов и т. д. Т. е. мне нужно как-то хранить имена добавленным полей и данные в них.

Как это правильно сделать?

Как-как... Да очень просто: сделать свою IDE (типа Акцесса). Пользователь видит описание таблицы и может добавить/удалить поля.
....
Геморройно? Да! Но если того хочет заказчик....Модифицировать таблицы - это не единственный и не самый лучший способ (IMHO).

Для добавления и хранения значений динамических полей можно использовать EAV структуру.
При этом надо не забывать, что при больших объемах хранимых данныхь и большом количестве динамических полей - может сильно страдать производительность.

Если уж модифицировать таблицы, то я бы создал специально отдельные доп таблицы, в которых можно добавлять/удалять столбцы.
Чтобы нерадивый администратор не угробил основную схему приложения.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091050
goodron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне кажется здесь вопрос в том, что заказчик может захотеть. А может захотеть чего-то другого. Возможно, Вамне стоит предусматривать такую возможность?
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091083
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле мне нужно только добавление полей (удаление слава богу не требуется). Это значит, что вариант с созданием временной таблицы (копии старой), добавлением туда поля, удалением старой таблицы и переименованием временной таблицы в старую подойдёт?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091095
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
ALTER TABLE ADD COLUMN
чем не подойдёт? или надо сделать чтоб всё посложней было?
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091109
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё поступило предложение для каждого нового свойства таблицы создавать отдельную таблицу. Плюс создать ещё одну таблицу, в которой хранить параметры каждого свойства (имя свойства => имя таблицы).
Как вам такой вариант?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091128
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
Код: plaintext
ALTER TABLE ADD COLUMN
чем не подойдёт? или надо сделать чтоб всё посложней было?
Мне нужно ещё где-то сохранить, что это поле на человеческом языке называется так-то...
А так вообще идеальный вариант.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091130
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman V TchemisovНа самом деле мне нужно только добавление полей (удаление слава богу не требуется).После создания пары "левых" или "тестовых" полей - потребуется.

Roman V TchemisovЕщё поступило предложение для каждого нового свойства таблицы создавать отдельную таблицу. Плюс создать ещё одну таблицу, в которой хранить параметры каждого свойства (имя свойства => имя таблицы).
Как вам такой вариант?На каждое поле по таблице? Смешно

Создайте ОДНУ таблицу под ВСЕ дополнительные поля.

Еще видел следующий подход - в основной таблице было добавлено по 10 полей VARCHAR(1000), 10 полей FLOAT, 10 полей INTEGER, а в вспомогательной таблице хранилось описание - какое поле какое имеет название и какой контрол к нему пристыковать.

Понятно, что этот вариант имеет ограничение по кол-ву доп. полей.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091135
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman V Tchemisov egorych
Код: plaintext
ALTER TABLE ADD COLUMN
чем не подойдёт? или надо сделать чтоб всё посложней было?
Мне нужно ещё где-то сохранить, что это поле на человеческом языке называется так-то...
А так вообще идеальный вариант.Сохрание то что вам нужно в отдельной настроечной таблице.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091166
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman V TchemisovМне нужно ещё где-то сохранить, что это поле на человеческом языке называется так-то...
А так вообще идеальный вариант.Вариант 1. Простой (но мне не нравится по религиозным соображениям) - сразу называть столбцы на человеческом языке
Вариант 2. Посложней (но правильный, имхо, ессно) - дополнительная таблица с описаниями всех столбцов. что-то вида:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE TableDescription (
  FieldID INT NOT NULL PRIMARY KEY,
  FieldName VARCHAR( 50 ) NOT NULL,
  FieldDescription VARCHAR( 100 ) NOT NULL,
  ...
)
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091190
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что в моём случае (необходимость редактирования только одной таблицы) будет достаточно только
Код: plaintext
ALTER TABLE ...
+ дополнительная таблица для описания полей?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35091242
Roman V TchemisovЯ правильно понимаю, что в моём случае (необходимость редактирования только одной таблицы) будет достаточно только
Код: plaintext
ALTER TABLE ...
+ дополнительная таблица для описания полей?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
Для одной таблицы - да...
Но если заказчик захочет модифицировать несколько таблиц БД, то придется сделать полноценную поддержку метаданных (практически: БД о структуре Вашей БД)...
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35092698
goodron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это если на новых полях не будет завязано никакой сложной логики, кроме добавления, удаления, редактирования, просмотра. Если же новое поле должно будет участвовать в каких-либо вычислениях (а это наиболее вероятно), то плакали все ваши "предусмотрения".
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35092704
goodron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вашему заказчику нужны поля только для того, чтобы создавать их, заполнять содержимым, а потом этим содержимым любоваться?
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35092707
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodronИ это если на новых полях не будет завязано никакой сложной логики...Угу.
Даже такая простая вещ как "Выбор значения из справочника" становится не очень простой.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35092737
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может надо с другой стороны подходить? либо отдавать исходники заказчику и типа "моя хата с краю" сопровождайте сами как хотите, либо садить их на авторское сопровождение и доработки отдельным прайсом ? )))
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35092857
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyДаже такая простая вещ как "Выбор значения из справочника" становится не очень простой.
Есть замечательный подход решать проблемы по факту из возникновения. Это ^^^ легко прикручивается, если не обгадиться с концепцией в начале.

По теме - поля добавляют руками через alter table (небось не кухарки), данные тащат через вьюхи, которые сами же и правят (ситуация, когда с новой версией софта приходит новая версия старой поправленной юзером вьюхи, неприятная, но не более того, еще можно тащить данные их хранимой процы, если руки и сервер позволяют, еще можно вообще пользовательский обработчик на формирование селекта навесить, пусть извращаются как хотят, у нас практически везде так можно). Сортироваться стоит уметь по любым вытаскиваемым полям независимо от того, чьи это поля, Ваши или юзеров. Сделать соответствующий интерфейс при желании несложно. Человеческие имена полей можно хранить в одной отдельной таблице для всех таблиц, куда пописал заказчик, с этим проблем вообще никаких, там же хранить, изменяется ли поле, и прочие опции. Вопросы, связанные с используемыми пользовательскими полями и всякими справочниками, сильно связаны с используемым фреймворком, потому без конкретики рассуждать бессмысленно. Отвечу только, что мы это умеем, ничего сложного в этом нет. А вот сразу называть поля на "человеческом" языке противопоказано, слишком много телодвижений может потребоваться при изменении данного "человеческого наименования".
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35093095
GOAL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman V TchemisovПромахнулся с кнопкой :-(

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



может xml попробовать, н будет же заказчик в SQLNavigator сортировать по полям?
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35093481
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodronВашему заказчику нужны поля только для того, чтобы создавать их, заполнять содержимым, а потом этим содержимым любоваться?
Они нужны для сортировки результатов.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35093500
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наиценнейшее свойство.
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35093593
goodron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman V Tchemisov
Они нужны для сортировки результатов.
Excel
...
Рейтинг: 0 / 0
Предусмотреть возможность добавления полей
    #35096173
Фотография Roman V Tchemisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заказчик хочет просматривать результаты (и сортировать по разным полям) через веб-интерфейс.
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Предусмотреть возможность добавления полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]