powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разрастается количество полей в таблице
25 сообщений из 25, страница 1 из 1
Разрастается количество полей в таблице
    #38676879
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые!

Имею таблицу в MySQL, где приходится некоему объекту постоянно расширять свойства и в связи с этим растет количество полей. Уже становится трудно ориентироваться и просматривать записи в этой таблице. Как быть? Есть пути оптимизации?
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38676899
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10s,
уйти от "горизонтального" справочника к вертикальному.
Т.е. делаете к основной таблице следующую структуру (упрощенно):


авторEntity_Params
---------------------
Param_ID
Name

Params_Value
---------------------
ID
SourceTable_ID
Param_ID
Value


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

Из основных плюсов - дальнейшее увеличение количества параметров сущности совершенно не требует изменения табличной структуры, так же можно по дефолту прописать базовые неизменяемые запросы по выборке всех параметров сущности.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38676904
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
второй подход, так же практикуемый в нашей базе, но мне менее симпатичен - формировать таблицу расширений, с условием связи 1-1 к основной, в которую будете выносить дополнительные параметры.

Т.е. поулчается две таблицы:

авторSource
----------------
ID
Param1
Param2
..........
Param(n)


Sorce_Extension
----------------
Source_ID
Param(n+1)
Param(n+2)
..............
Param(n+k)

Параметры при этом можно разбить по смысловой нагрузке и т.п.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38676909
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sЗдравствуйте, уважаемые!

Имею таблицу в MySQL, где приходится некоему объекту постоянно расширять свойства и в связи с этим растет количество полей. Уже становится трудно ориентироваться и просматривать записи в этой таблице. Как быть? Есть пути оптимизации? например
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38676938
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sЗдравствуйте, уважаемые!

Имею таблицу в MySQL, где приходится некоему объекту постоянно расширять свойства и в связи с этим растет количество полей. Уже становится трудно ориентироваться и просматривать записи в этой таблице. Как быть? Есть пути оптимизации?
тут нет провода для о оптимизации пока.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677142
b10s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

почему?
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677178
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sMasterZiv,

почему?Когда говорят о базах данных, в 99% случаев под "оптимизацией" по умолчанию понимают оптимизацию производительности. У вас с ней проблем пока нет (ну или вы про них не пишете). Потому и повода нет.
Вы пишете об оптимизации процесса разработки, что вам якобы "неудобно" (дайте угадаю - поля таблицы не влезают на экран, если написать "select * from mytable"?). Это, имхо, вопрос привычки. Со временем привыкнете выбирать из таблицы те столбцы, которые действительно нужны. У нас, например, одна таблица есть с почти 300 полями, и ничего, живем как-то.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677182
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivb10sЗдравствуйте, уважаемые!

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

Я бы уточнил "пока суммарная возможная длинна полей не превышает лимита". Для сайбеза со страницей 2к это не так много (~1962 по-моему байт), что очень быстро выедается полями по типу "Comments varchar(150)" =)

А в целом затея ТС - на мой взгляд более чем правильная - бесконечно расширять таблицу - ИМХО вред.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677283
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас таблицы и формы строились генератором по нашему мета-описанию. Полей могло быть много, могло быть много пустых и иногда даже не используемых.

Через SELECT * на данные обычно смотреть было нужно только в контексте - вернул запрос данные, какое кол-во. Собственно с данными работали через свое приложение и кол-во полей было пофиг.

А для обработки данных: пару-тройку нужных полей и вперед. Или, что правильнее, SELECT в отдельную таблицу, обработали, проверили, влили в пром. базу.
Mikle83Я бы уточнил "пока суммарная возможная длинна полей не превышает лимита"....
My SQL:
http://dev.mysql.com/doc/refman/4.1/en/column-count-limit.html

There is a hard limit of 4096 columns per table

MS SQL:
http://msdn.microsoft.com/en-us/library/ms143432(v=sql.110).aspx

Columns per nonwide table: 1,024
Columns per wide table: 30,000

Oracle ссылки под рукой нет.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677417
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

речь не про количество колонок а про общую "длинну" данных в одном ряду (исключая BLOB, которые могут в OutRow уйти)

К примеру для сайбеза ASE:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc35823.1572/doc/html/san1334282764922.html

Встречал подобные ограничения и на других СУБД.
Если данные превышают указанный лимит => будет ексепшен. Как дело обстоит на указанных вами СУБД - не могу сказать.



Подходы могут быть разные, но если какой-то атрибут встречается, к примеру, у 10% записей "городить" для всей таблицы дополнительное поле?
На вкус и цвет как говорится. Можно так же контекстно зависимые поля сделать, но сопровождение такой структуры мягко сказать не облегчается...
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677446
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83второй подход, так же практикуемый в нашей базе, но мне менее симпатичен - ....
Да уж. Симпатичное в таких подходах, скорей всего, не кажный найдет. Не кажный.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677468
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoMikle83второй подход, так же практикуемый в нашей базе, но мне менее симпатичен - ....
Да уж. Симпатичное в таких подходах, скорей всего, не кажный найдет. Не кажный.

Меж тем уже неоднократно и не в одной БД (разные конторы) встречал подобные "решения", а также яростных защитников такого подхода, в большинстве случаев оперирующих всего одной парадигмой: "прямой селект, без заморочек, достаточно только джойна екстеншена".
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677509
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83,

Если проблема только в том, что поля не умещаются на страницу данных - то таблица-дополнение с отношением 1:1, конечно, предпочтительнее EAV
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677744
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sИмею таблицу в MySQL, где приходится некоему объекту постоянно расширять свойства и в связи с этим растет количество полей. Уже становится трудно ориентироваться и просматривать записи в этой таблице. Как быть? Есть пути оптимизации?

Если все эти поля действительно описывают объект, а проблема только в удобстве просмотра, то надо сделать удобный просмотр, показывающий атрибуты по группам. PageControls, деревья, и все такое, а не просто дефолтовый грид.

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

Только не думайте, что EAV из трехсот параметров будет чем-то удобнее и нагляднее, чем дефолтовый грид. Опять же встанет вопрос нормального просмотрщика.

Это мы не говорим о возможных физических ограничениях, это еще отдельный вопрос.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677846
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10sMasterZiv,

почему?

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

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

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

А уж "становится трудно ориентироваться и просматривать записи в этой таблице" -- это вообще детский лепет какой-то. Это -- твои личные трудности, трудно ориентироваться -- пиши документацию на таблицы, делай модели во всяких CASE, трудно просматривать -- пиши запросы не со всеми полями, а только с теми, которые нужны, и/или используй более удобные средства просмотра результатов запросов.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677847
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83MasterZivпропущено...

тут нет провода для о оптимизации пока.

Я бы уточнил "пока суммарная возможная длинна полей не превышает лимита". Для сайбеза со страницей 2к это не так много (~1962 по-моему байт), что очень быстро выедается полями по типу "Comments varchar(150)" =)

А в целом затея ТС - на мой взгляд более чем правильная - бесконечно расширять таблицу - ИМХО вред.

Проблема в любом случае не в большом кол-ве полей, а в неграмотном проектировании структуры БД.
Первое само по себе -- не криминал.
Отсутствие второго почти всегда даёт "узкие" таблицы.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677851
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83vadiminfoпропущено...

Да уж. Симпатичное в таких подходах, скорей всего, не кажный найдет. Не кажный.

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

Ничего плохого в таком подходе и правда нет, если это только для обхода физического ограничения на ширину записи.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38677960
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83
, а также яростных защитников такого подхода, ...
Могу предположить, что эти достойные всякого рода подражания в области защиты чего-либо люди, яростно клеймили "теоретиков".
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678153
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivMikle83пропущено...
Меж тем уже неоднократно и не в одной БД (разные конторы) встречал подобные "решения", а также яростных защитников такого подхода, в большинстве случаев оперирующих всего одной парадигмой: "прямой селект, без заморочек, достаточно только джойна екстеншена".

Ничего плохого в таком подходе и правда нет, если это только для обхода физического ограничения на ширину записи.

Мне не нравится с точки зрения хранения данных подход.
К примеру, имеем ограничение в 1962 байта на страницу.
Таблица разделяется на две, условно по ~1700 байт в каждой на ряд.

Итого (без учета служебной инфы приблизительный расчет) 1962-1700 = 262 байта на каждой странице "подвисает" неиспользуемыми.
Если у нас под сотню миллионов строк 262 * 100 000 000 = 26 200 000 000 байта ~ 24.4 Гб "лишнего" места.

Хранение в вертикальном справочнике все-таки более экономно...
Можно конечно и в горизонтальных таблицах распределить поля более грамотно, но из опыта => на это слабо обращают внимание =)

Хотя оборотная сторона медали - чтение данных из "вертикальной" таблицы по одному идентификатору в общем случае может быть более "дорогостоящим" и ресурсоемким - но тут надо в каждой конкретной задаче искать "баланс".
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678162
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чаще первая таблица забивается "под завязку" по длине строки, а во вторая набивается все, что не влезло в первую.
И длина строки во второй немногим больше размера страницы / 2 - вот тут совсем забавные ситуации =)
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678227
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83Итого (без учета служебной инфы приблизительный расчет) 1962-1700 = 262 байта на каждой странице "подвисает" неиспользуемыми.
Если у нас под сотню миллионов строк 262 * 100 000 000 = 26 200 000 000 байта ~ 24.4 Гб "лишнего" места.

Хранение в вертикальном справочнике все-таки более экономно...

Да ну?
в EAV у Вас на одно "смысловое" поле минимум 2 "служебных" - ID_Object, ID_Attribute. не считая пары индексов по этим полям.
Чтобы 100 полей в "плоской" таблице занимали больше места, чем те же 100 полей в EAV - это вряд ли.

У EAV есть ровно одно (правда, немаленькое) преимущество - возможность добавления атрибутов "на лету". Во всем остальном она проигрывает "плоским" таблицам.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678248
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин У EAV есть ровно одно (правда, немаленькое) преимущество - возможность добавления атрибутов "на лету".
Потому что теперь они в рамках РМД и не атрибуты вовсе, а данные. Атрибуты теперь ID_Object, ID_Attribute.
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678250
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин Да ну?
в EAV у Вас на одно "смысловое" поле минимум 2 "служебных" - ID_Object, ID_Attribute. не считая пары индексов по этим полям.

Оба идентификатора int-овые => 8 байт дополнительно надо на одно "смысловое" поле.
Ранее было получено "лишние" 262 байта на каждой странице. Итого 262 / 8 = 32 идентификатора можно разместить.
Т.е. 1700 байт распределяются - под 32 "смысловых" поля. Средняя длинна "смыслового" поля при этом 53 байта.

Если каждая ваша строка содержит всего 20 "смысловых" полей по 50 байт.
Общий их объем 1000 байт - соответственно 1 страница под одну запись.

В вертикальном же справочнике - у вас 32 поля на одну страницу, т.е. чуть больше, чем полторы записи.

Тут очень упрощенно привел расчеты.
Но в реальности был пример, когда вертикальный справочник "сжал" объем данных.

Еще раз отмечу - в любом подходе требуется баланс и оценка выполняемого действия со всех возможных сторон.


P.S.: индексы вообще в расчет не беру, т.к. специфика может быть такая, что на каждое поле плоской таблицы потребуется индекс навесить... Слишком абстрактная задача - обсуждать индексы на абстрактных EAV и плоских структурах...
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678418
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.06.2014 11:29, Mikle83 wrote:

> Итого (без учета служебной инфы приблизительный расчет) 1962-1700 = 262
> байта на каждой странице "подвисает" неиспользуемыми.
> Если у нас под сотню миллионов строк 262 * 100 000 000 = 26 200 000 000
> байта ~ 24.4 Гб "лишнего" места.

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


> Хранение в вертикальном справочнике все-таки более экономно...
> Можно конечно и в горизонтальных таблицах распределить поля более
> грамотно, но из опыта => на это слабо обращают внимание =)

Обращать надо.
Но главное -- EAV не везде подходит.


> Хотя оборотная сторона медали - чтение данных из "вертикальной" таблицы
> по одному идентификатору в общем случае может быть более "дорогостоящим"
> и ресурсоемким - но тут надо в каждой конкретной задаче искать "баланс".

Вот именно. К тому же далеко не все подход EAV приемлют, например, все
современные модные ORM с ним превращаются в пшик.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Разрастается количество полей в таблице
    #38678524
babona
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b10s,

озвучьте предметную область этого некоего объекта?
для каких целей разработка?
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разрастается количество полей в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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