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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Понятно, что этот вариант имеет ограничение по кол-ву доп. полей.
...
Рейтинг: 0 / 0
28.01.2008, 11:37
    #35091135
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
Roman V Tchemisov egorych
Код: plaintext
ALTER TABLE ADD COLUMN
чем не подойдёт? или надо сделать чтоб всё посложней было?
Мне нужно ещё где-то сохранить, что это поле на человеческом языке называется так-то...
А так вообще идеальный вариант.Сохрание то что вам нужно в отдельной настроечной таблице.
...
Рейтинг: 0 / 0
28.01.2008, 11:45
    #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
28.01.2008, 11:51
    #35091190
Roman V Tchemisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
Я правильно понимаю, что в моём случае (необходимость редактирования только одной таблицы) будет достаточно только
Код: plaintext
ALTER TABLE ...
+ дополнительная таблица для описания полей?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
...
Рейтинг: 0 / 0
28.01.2008, 12:09
    #35091242
Предусмотреть возможность добавления полей
Roman V TchemisovЯ правильно понимаю, что в моём случае (необходимость редактирования только одной таблицы) будет достаточно только
Код: plaintext
ALTER TABLE ...
+ дополнительная таблица для описания полей?
=======================
Роман Чемисов
Тел.: +79149052257
ICQ: 157070721
Skype: gangabass
Для одной таблицы - да...
Но если заказчик захочет модифицировать несколько таблиц БД, то придется сделать полноценную поддержку метаданных (практически: БД о структуре Вашей БД)...
...
Рейтинг: 0 / 0
28.01.2008, 17:44
    #35092698
goodron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
И это если на новых полях не будет завязано никакой сложной логики, кроме добавления, удаления, редактирования, просмотра. Если же новое поле должно будет участвовать в каких-либо вычислениях (а это наиболее вероятно), то плакали все ваши "предусмотрения".
...
Рейтинг: 0 / 0
28.01.2008, 17:45
    #35092704
goodron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
Вашему заказчику нужны поля только для того, чтобы создавать их, заполнять содержимым, а потом этим содержимым любоваться?
...
Рейтинг: 0 / 0
28.01.2008, 17:45
    #35092707
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
goodronИ это если на новых полях не будет завязано никакой сложной логики...Угу.
Даже такая простая вещ как "Выбор значения из справочника" становится не очень простой.
...
Рейтинг: 0 / 0
28.01.2008, 17:53
    #35092737
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
может надо с другой стороны подходить? либо отдавать исходники заказчику и типа "моя хата с краю" сопровождайте сами как хотите, либо садить их на авторское сопровождение и доработки отдельным прайсом ? )))
...
Рейтинг: 0 / 0
28.01.2008, 18:23
    #35092857
Сергей Васкецов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
BelyДаже такая простая вещ как "Выбор значения из справочника" становится не очень простой.
Есть замечательный подход решать проблемы по факту из возникновения. Это ^^^ легко прикручивается, если не обгадиться с концепцией в начале.

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

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



может xml попробовать, н будет же заказчик в SQLNavigator сортировать по полям?
...
Рейтинг: 0 / 0
29.01.2008, 08:21
    #35093481
Roman V Tchemisov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
goodronВашему заказчику нужны поля только для того, чтобы создавать их, заполнять содержимым, а потом этим содержимым любоваться?
Они нужны для сортировки результатов.
...
Рейтинг: 0 / 0
29.01.2008, 08:32
    #35093500
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
Наиценнейшее свойство.
...
Рейтинг: 0 / 0
29.01.2008, 09:30
    #35093593
goodron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Предусмотреть возможность добавления полей
Roman V Tchemisov
Они нужны для сортировки результатов.
Excel
...
Рейтинг: 0 / 0
30.01.2008, 05:46
    #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]