powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Спор о структуре БД
18 сообщений из 18, страница 1 из 1
Спор о структуре БД
    #35840705
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вели переговоры с заказчиком. Коснулись структуры базы данных.
Спор возник на неожиданном месте.

Структуру в упрощенном виде привожу
таблица 1.
tbX
xID
xName

таблица 2.
tbY
yID
yName

таблица 3.
tbZ
zID
zName

таблица 4(обобщенная).
tbXYZ
xyzid
другие поля
xID
yID
zID

Я привык делать нормализованную структуру, и не задумываться.

Заказчик настаивает на таком решении вместо четырех таблиц одна:
tbXYZ_zakazchik
xyzid
другие поля
xName
yName
zName

Дополнительно скажу, что
1. В базе очень много записей.
2. Дублирований полей xName,yName,zName будут часто повторяться


Заказчик настаивает на своем опыте, что будет система тормозить в случае, если структура будет нормализованной (мой вариант). Что при многочисленных выборках, надо делать join 3-x таблиц, что будет тормозить. Итд итп.
Что добавление новых записей сложнее в моем варианте.


Выношу мнение заказчика Вам на обсуждение.
Что скажете? На чьей стороне правда?
Имеет ли вообще право на жизнь его подход?
Что скажут гуру, которые работают с большими базами? Какой подход предпочтительнее?
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35840734
vino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Challenger, на своем мнении настаивать не буду, тем более - типы полей не указаны. Но:
Если xName,yName,zName занимают байт не более чем xID,yID,zID, то нечего нормализовывать, а если в несколько раз больше, то нормализции быть! При выполнении соединений достаточно разрешить грязное чтение практически неизменяемых справочников tbX, tbY, tbZ, чтобы даже выиграть в скорости чтения/записи данных в tbXYZ.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35840756
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тип полей ID = int
тип полей Name = varchar(128)
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35840789
Козьма Прутков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,
думаю, еще один интересный вопрос - а меняются ли имена, эти самые xName, yName, zName? И если да, то надо ли их менять для всех записей в общей таблице? Если имена меняются, и их надо менять везде, то я бы предпочел нормализованную структуру. Если имена не меняются, точнее, по всей таблице их нет нужды менять, то дальше могут играть другие факторы.

Дальше, объем - это понятно, строки занимают больше места чем int-ы.
Сомнения в добавлении новых записей - смотря какие данные. Ничто не мешает, например, написать ХП, которая будет принимать имена, и заполнять справочные таблицы при необходимости. Так что с точки зрения программного интерфейса проблем не будет.

Расскажите еще вот что:
1) что за данные (по сути) будут представлены в этой таблице. Если сильно привязано к предметной области или сложно для понимания, можно найти общепонятную аналогию, так думать легче.
2) каков режим их появления в БД, откуда и какими количествами будут приходить
3) соответственно, как и кем они будут читаться
4) говорите очень много заисей - это сколько? Потаблично.

Пишите, будем думать дальше.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35840823
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имена меняются, но не очень часто, раз в месяц, может измениться имя.
Я этот момент сразу отметил при диалоге с заказчиком. Он ответил, что лучше напишет скрипт, который будет проходится по всей таблице и изменять имена.
Про размер, я тоже сразу отметил. Заказчик отметил, что разница в размере данных не существенна. И главное быстрота работы с данными, формирование отчетов и добавление.

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

Отвечаю на вопросы

1. В этих таблицах хранятся параметры некоторых объектов. Углубляться думаю тут не стоит в предметную область. Хотя может быть позже нарисую полную структуру.
2. Данные в таблицах появляются на основе работы сервисов.
2 режима:
режим 1 - сервис ночью будет сливать все изменения за день.
режим 2 - сервис будет моментально переносить изменения в реальном режиме времени.
На первом этапе режим1, потом режим2.

3. Данные в базе данных будут использоваться для просмотра из клиентских приложений.
4. Записей в таблице tbXYZ 300000 сейчас, ежедневно увеличивается на 1000.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35840838
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> будет система тормозить в случае, если структура будет нормализованной
> Что при многочисленных выборках, надо делать join 3-x таблиц, что будет тормозить.

на вычитки с сортировками - да, будет тормозить такое объединение, когда условия на несколько таблиц в объединении сразу - серверу приходится сначала соединение + условие, потом - сортировка. ессно, сканим все или достаточно много для того, чтобы "тормозило". очень не всегда лечится индексами

> Что добавление новых записей сложнее в моем варианте.

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

> Имеет ли вообще право на жизнь его подход?

да. в "отчетных" системах часто умышленно избыточно денормализуют данные. но потом что-то поменять - серьезное железо на уши становится

> Какой подход предпочтительнее?

крайне мало данных. с равным успехом используются все 3 варианта. опять же, пока нет кучи кода никто не мешает сразу сделать нормальзованное хранение, накрыть это все нужными представлениями и их "материализовать". но тут еще один фактов - на MSDE / Express это все работать не будет должным образом :) так что если система под десктопы - еще ограничений будет

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841041
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerВели переговоры с заказчиком. Коснулись структуры базы данных.
Спор возник на неожиданном месте.

Структуру в упрощенном виде привожу
таблица 1.
tbX
xID
xName

таблица 2.
tbY
yID
yName

таблица 3.
tbZ
zID
zName

таблица 4(обобщенная).
tbXYZ
xyzid
другие поля
xID
yID
zID

Я привык делать нормализованную структуру, и не задумываться.
...
Дополнительно скажу, что
1. В базе очень много записей.
2. Дублирований полей xName,yName,zName будут часто повторяться


Заказчик настаивает на своем опыте, что будет система тормозить в случае, если структура будет нормализованной (мой вариант). Что при многочисленных выборках, надо делать join 3-x таблиц, что будет тормозить. Итд итп.
Что добавление новых записей сложнее в моем варианте.
1. Непонятно, каким образом будут связываться данные из первых 3 таблиц в четвёртую.
2. Если алгоритм связывания относительно простой, то вполне может быть вариант с одной таблицей, в которой будут находиться все 3 таблицы, благо их структура совпадает. Только добавить поле, определяющее таблицу, что-то типа:
FieldtbIDxIDxName
Собирать же в обобщённый вариант можно с помощью PIVOT или агрегирующих функций.
3. Если возвращать пользователям тысячи и более записей, то "join 3-x таблиц" действительно может составить проблему, впрочем, в таком случае и выборка из одной обобщенной таблицы тоже не спасёт. В противном же случае, когда количество возвращаемых записей относительно невелико, то влияние join может оказаться не столь уж и пагубным.
4. Если заказчик сам всё знает, то может пусть сам и делает ? Иначе может возникнуть ситуация, когда, уступая заказчику, Вы же окажетесь виноватым.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841054
Geep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер БД для того и нужен, чтобы джойнить, а не валить
все данные в плоскую таблицу.
Индексированные представления опять же есть.

Думаю надо набросать структуру, заполнить тестовыми данными
и посмотреть.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841163
trayal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerДополнительно скажу, что
1. В базе очень много записей.
2. Дублирований полей xName,yName,zName будут часто повторяться
1)Из сказанного получается, что очень много записей - это относится к таблице 4 tbXYZ. А таблицы tbX, tbY, tbZ получается гораздо меньшего объема. Поэтому не думаю, что join с ними будет играть решающую роль в быстродействии.
2) Проще контролировать уникальность xName,yName,zName
3) Не получится ситуация, когда у части записей xName1 поменяли на xName2, а у остальных нет.
4) Если выборку делать по определенному xName, то индекс по xID всяко лучше чем индекс по xName. Т.е. тут еще зависит от наиболее часто употребляемых критериев выборки.

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

ChallengerЗаказчик настаивает на своем опытеОпыт Заказчика сложился на основе ДРУГОЙ структуры и ДРУГИХ запросов.

Присоединяюсь к ChA
ChA4. Если заказчик сам всё знает, то может пусть сам и делает ? Иначе может возникнуть ситуация, когда, уступая заказчику, Вы же окажетесь виноватым.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841282
Козьма Прутков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,
300 тысяч - это не много. То, что они постоянно добавляются по 1000 в сутки - чуть-чуть хуже, таблица будет расти по 300 тыс в год и через 2 года уже достигнет лимона.

Судя по описанию, у вас хранилище данных: много данных из разных источников, которые пользователи только читают. Это для OLAP или отчетов, судя по всему, делается. Тут денормализация - нормальная ситуация.

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

Какие будут запросы от пользователей? xName like '%555%' будут, или только равенства? Сколько значений в справочных таблицах? Будут ли какие-нибудь критерии по времени данных, например, что-то за последние 3 месяца?
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841336
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChA
1. Непонятно, каким образом будут связываться данные из первых 3 таблиц в четвёртую.

Почему непонятно. Там foreighn key, и отношение один ко многим, что по моему очевидно сходя из названий полей.

ChA
4. Если заказчик сам всё знает, то может пусть сам и делает ? Иначе может возникнуть ситуация, когда, уступая заказчику, Вы же окажетесь виноватым.

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

Полностью поддерживаю.
Еще подчеркну откуда дует ветер. Заказчик очень любит LOTUS. А там другая архитектура, в отличие реалиционных баз данных.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841377
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Козьма ПрутковChallenger,
Какие будут запросы от пользователей? xName like '%555%' будут, или только равенства? Сколько значений в справочных таблицах? Будут ли какие-нибудь критерии по времени данных, например, что-то за последние 3 месяца?
'%%555%' если и будут, то их будет немного.
Справочных таблиц 3.
В одной будет не больше 10 значений.
Во второй не больше 20 значений.
В третьей не больше 1000 значений.
Дат здесь нету ни в одной из таблиц.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841384
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо, что тему перенесли с форума по SQL серверу.
Там больше экспертов, которые работают практически с большими объемами данных.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841495
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger'%%555%' если и будут, то их будет немного.
Только эти "немного" запросов будут сильно тормозить - это-же скан по большой таблице.

Ещё один вопрос - нужно-ли будет выводить список этих xName, yName, zName

distinct значений из большой таблицы - это тоже медленно.

А вообще самый главный вопрос - это бизнес-логика и типичные запросы.

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

Например, в таблице заказов я делал (грубо):
id_товара - ссылка на идентификатор товара из справочника
id_цены - ссылка на справочник цены, по которой был продан товар (там всякие вещи типа ценовой группы, периода действия и прочее)
название товара - как было написано в распечатаном документе заказа
цена - какая была в распечатаном документе заказа

т.е. дополнительно к нормализованной структуре пишутся и денормализованные данные так, как их видел пользователь в момент заказа.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841538
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerПлохо, что тему перенесли с форума по SQL серверу.
Там больше экспертов, которые работают практически с большими объемами данных.Поверьте, у вас не большие объемы. 300 тыс - это только кажется, что много.
Да и миллион - это еще не смерть.
У нас в БД - объектов окло 5 млн, при выборках приходится джоинить по 5-6 справочников (небольших, не более 1000 строк в справочнике).
Поскольку по основным полям, по которым проходит отсечение данных, построены индексы - проблем с производительностью нет.
И сервер (железка) у нас не какой-нибудь супернавороченный. Работает все под Oracle.
Но и MS SQL совсем не Access, какой-нибудь.

Проведите тест, покажите заказчику, что такая структура тормозить не будет.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841590
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerChA
1. Непонятно, каким образом будут связываться данные из первых 3 таблиц в четвёртую.
Почему непонятно. Там foreighn key, и отношение один ко многим, что по моему очевидно сходя из названий полей.Слово "обощенная" обескуражило, не понял, что это стандартная "снежинка", таблица фактов, обвешанная справочниками. Оптимизатор MS SQL нормально работает с такой схемой. Конечно, многое зависит от типовых запросов, но "выигрывая" в отсутствии слияний, мы проигрываем в объёмах, и наоборот. Операции IO самые дорогие, поэтому может так случится, что слияние окажется более оптимальным. Судя по размерам, справочники вообще могут не вылезать из ОЗУ, поэтому стоимость слияний будет очень мала, а вот таблицу фактов придется постоянно поднимать с диска(ов), и чем "длиннее" записи, тем больше будет чтений данных. Это может запросто организовать "затык" в дисковой подсистеме, особенно, когда будет много параллельных запросов.

P.S. В конце концов, несложно построить тестовый пример, и по производительности типовых запросов определить, что будет более оптимальным в конкретном случае.
...
Рейтинг: 0 / 0
Спор о структуре БД
    #35841608
Гость000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ChallengerGeepСервер БД для того и нужен, чтобы джойнить, а не валить
все данные в плоскую таблицу.

Полностью поддерживаю.
Еще подчеркну откуда дует ветер. Заказчик очень любит LOTUS. А там другая архитектура, в отличие реалиционных баз данных.

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


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