Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Одна большая таблица или несколько маленьих? / 23 сообщений из 23, страница 1 из 1
28.03.2006, 19:37
    #33630731
cln75
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Народ подскажите, есть, например, таблица с информацией о клиентах (ФИО, дата рождения, паспортные данные, адреса, контактные телефоны и т.д.)
Как лучше организовать - использовать одну таблицу с большим количеством полей или разбить на несколько маленьких (по количеству полей) и при запросах их связывать
...
Рейтинг: 0 / 0
28.03.2006, 19:47
    #33630755
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Ну я обычно выделяю основные и дополнительные данные. Т.е. в главной таблице хранится общая инофрмация о человеке, которая присутствует для всех (ФИО, номер паспорта и т.д.) и отдельно таблица дополнительных данных, которые могут и не присутствовать для некоторых людей. Ну номера телефонов я бы вынес тоже в отдельную таблицу, т.к. здесь может быть связь 1 ко многим.
...
Рейтинг: 0 / 0
28.03.2006, 19:52
    #33630762
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Если ставить вопрос как "одна широкая таблица или несколько узких, связанных один к одному" то первое лучше до тех пор, пока нет очень конкретной причины предпочесть второе.

Если же говорить об информации о клиентах, то это может быть изрядное количество сложно связанных между собой таблиц. Тут весь вопрос в том, какую информацию нужно хранить. Например, контактные данные, должности и дни рождений ключевых сотрудников.
...
Рейтинг: 0 / 0
29.03.2006, 09:09
    #33631257
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Я вынес в отдельные таблицы следующие атрибуты клиента,которых может быть много: наименования (брэнд,полное,краткое,кличка), электронный адрес (телефон,аська,e-mail),почтовый адрес (юридический,адрес ведения деятельности),счета(расчетный в банке 1,расчетный в банке 2),памятные даты(день рождения,день свадьбы).
...
Рейтинг: 0 / 0
29.03.2006, 11:18
    #33631624
iAndrew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
когда я делал систему Отдела Кадров - в отдельные таблицы выносил только ту инфомацию, количество которой нельзя определить..

Задайте вопрос "Сколько номеров телефонов будет у каждого человека" - если ответ "нам нужно только 1 домашний и 1 рабочий" то нет смысла ИМХО создавать отдельную сущность..

А если ответ "хоть сколько.. мы же не знаем сколько у каждого сотрудника всяких сотовых и т.д... Но нам нужно учитывать все" то есть смысл выделить в отдельную сущность
...
Рейтинг: 0 / 0
29.03.2006, 13:11
    #33632065
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Причины для нескольких таблиц
Некоторые СУБД не допускают более одного поля типа BLOB в таблице.
Редко используемые поля - в отдельный файл, тейблспейс.
Очень большой поцент NULL в полях - но с эконмией на пустых значениях обычно СУБД справляются без посторонней помощи.
...
Рейтинг: 0 / 0
29.03.2006, 15:44
    #33632843
mir
mir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Ужк все верно сказали: одна таблица для обязательных полей, и могут быть доп. таблица (цы) для необязательных полей (особенно, если они весьма редко заполняются).
...
Рейтинг: 0 / 0
29.03.2006, 15:59
    #33632902
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
ModelRПричины для нескольких таблиц
Некоторые СУБД не допускают более одного поля типа BLOB в таблице.
Редко используемые поля - в отдельный файл, тейблспейс.
Очень большой поцент NULL в полях - но с эконмией на пустых значениях обычно СУБД справляются без посторонней помощи.
ИМХО Все что можно, собрать в одну таблицу.

А все такие ухищрения "Редко используемые поля - в отдельный файл, тейблспейс" реально необходимы для всероссийской переписи населения. Или для общероссийских операторов связи. Только вот думаю что разработчики этих программ не спрашивают на SQL.RU советов ;)

А так сколько клиентов у среднего предприятия 100-1000?
...
Рейтинг: 0 / 0
29.03.2006, 16:10
    #33632944
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Ну здесь ведь еще не только вопрос нормализации и экономии дискового пространства, но и вопрос конфликтов при одновременном доступе. При редактировании таблицы с сотней полей легче нарваться на конфликт при обновлении, чем когда таблица разбита на несколько более мелких.
...
Рейтинг: 0 / 0
29.03.2006, 16:34
    #33633038
proposed amendment
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
_spy_Ну здесь ведь еще не только вопрос нормализации и экономии дискового пространства, но и вопрос конфликтов при одновременном доступе. При редактировании таблицы с сотней полей легче нарваться на конфликт при обновлении, чем когда таблица разбита на несколько более мелких.

кроме того, это еще и вопрос унификации и повторяемости решения...

какой смысл каждый раз по-новой решать одну и ту-же задачу...

сделать один раз лучшим образом и использовать везде где придется минимально подтачивая (или вообще не пользуясь напильником)

у меня в таблице контактов хранятся только Native Properties - Идентификатор, Имя/фамилия/Отчество, Пол, Дата_рождения

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

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

лет пять уже не переписывал структуры
...
Рейтинг: 0 / 0
29.03.2006, 17:27
    #33633239
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
_spy_При редактировании таблицы с сотней полей легче нарваться на конфликт при обновлении, чем когда таблица разбита на несколько более мелких.
Не согласен, но допустим. Из этого непосредственно следует, что при обновлении мелких таблиц гораздо легче нарваться на deadlock
...
Рейтинг: 0 / 0
29.03.2006, 17:39
    #33633277
_spy_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
softwarerИз этого непосредственно следует, что при обновлении мелких таблиц гораздо легче нарваться на deadlock
Во-первых, в грамотно спроектированной системе deadlock - редкость.
Во-вторых, если разными пользователями редактируются различные срезы информации о человеке (например, отдельно редактируется телефонный справочник, отдельно редактируются рекомендации о человеке) - то риск конкуренции за ресурсы уменьшается при разделении по разным таблицам.
...
Рейтинг: 0 / 0
29.03.2006, 18:25
    #33633437
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
_spy_Во-первых, в грамотно спроектированной системе deadlock - редкость.
Я бы сказал, в грамотно спроектированной системе deadlock - ЧП, при котором следует найти виновного и дать ему по шее. И? Тем не менее, следствие работает. Из чего можно сделать вывод: в грамотно спроектированной системе такого разбрасывания быть не должно :)

_spy_Во-вторых, если разными пользователями редактируются различные срезы информации о человеке
То я не могу припомнить ни одного случая, при котором редактируемые атрибуты соотносились бы один к одному и соответственно могли бы лежать в одной таблице. Теоретически такую ситуацию сконструировать можно, но практика ставит простой барьер: ролевое редактирование подразумевает достаточно большую и сложную информацию, и в этом случае уже не пытаются упрощать задачу соглашениями вида "один телефон на человека".

Более того, насколько я помню, пару лет назад здесь было глобальное обсуждение пессимистических-оптимистических блокировок, с участием большинства известных подписчиков форума, и среди прочего вылез именно этот вопрос - "редактирование части записи". Сколь помню, тогда никто так и не рассказал про практическую ситуацию, где "блокировка всей записи" была заметно худшим решением.
...
Рейтинг: 0 / 0
30.03.2006, 10:46
    #33634372
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
_spy_Ну здесь ведь еще не только вопрос нормализации и экономии дискового пространства, но и вопрос конфликтов при одновременном доступе. При редактировании таблицы с сотней полей легче нарваться на конфликт при обновлении, чем когда таблица разбита на несколько более мелких.
Представьте себе ситуацию, когда один оператор меняет ФИО контрагента, а другой его пол ;) Справочник клиентов это не та информация которая требует дополнительных затрат на потенцифльную проблему "одновременного доступа".

А вот обратная ситуация когда таблицы связаны 1:1 и при импорте данных кто-то забудет внести строчку в 4-ую таблицу, или наоборот забудет удалить из 3-ей это намного более типичная ошибка.
...
Рейтинг: 0 / 0
30.03.2006, 11:05
    #33634435
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
proposed amendment
кроме того, это еще и вопрос унификации и повторяемости решения...
какой смысл каждый раз по-новой решать одну и ту-же задачу...

Абсолютно согласен. Базовый функционал у нас для различных приложений не менялся несколько лет, не считая бантиков типа внесения "ЕГРН"

proposed amendment
у меня в таблице контактов хранятся только Native Properties - Идентификатор, Имя/фамилия/Отчество, Пол, Дата_рождения

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

А вот с этим позволю не согласиться, и не только из за возможных DealLock, но и из за сложности в поддержке такого решения.

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

Аналогично с номером факса, если например мы ватоматизируем рассылку чего-то через факс сервер, то нам необходим один номер факса, а все остальные номера факсов это справочная информация, которую можно хранить отдельно.
...
Рейтинг: 0 / 0
30.03.2006, 12:19
    #33634674
proposed amendment
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
EstetsА вот с этим позволю не согласиться.

а вот с этим прозвольте согласиться :)

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

мы также следуем принципу "нормальной денормализации", в частности почтовый адрес и еще пара актуальных реквизитов, хранится в той же таблице - адрес одной строкой, ФИО Должность стороны Договора одной строкой...

есть несколько соображений, которые вполне оправдывают такой подход
...
Рейтинг: 0 / 0
30.03.2006, 12:23
    #33634692
proposed amendment
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
уточню - это применительно к компаниям, частные лица как изложено выше
...
Рейтинг: 0 / 0
30.03.2006, 12:41
    #33634763
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
EstetsВозможно со мной не согласятся многие сторонники нормализации БД, но привиду пример, у нас юридический адрес лежит в той же таблице где и остальные данные о партнере. Хотя казалось бы есть еще несколько адресов
Имхо пока что тут не с чем соглашаться или не соглашаться - вопрос в том, чем оправдана данная конкретная денормализация. Скажем, понятно, что для человека достаточно естественно хранить в основной таблице его текущее ФИО, хотя рядом лежит история изменений.
...
Рейтинг: 0 / 0
30.03.2006, 15:03
    #33635338
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
softwarer EstetsВозможно со мной не согласятся многие сторонники нормализации БД, но привиду пример, у нас юридический адрес лежит в той же таблице где и остальные данные о партнере. Хотя казалось бы есть еще несколько адресов
Имхо пока что тут не с чем соглашаться или не соглашаться - вопрос в том, чем оправдана данная конкретная денормализация. Скажем, понятно, что для человека достаточно естественно хранить в основной таблице его текущее ФИО, хотя рядом лежит история изменений.
Вопрос поднятый cln75 был "Как лучше организовать" я поделился особенностями реализации в которой я участвовал. Надеюсь эта информация кому-нибудь поможет.

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

Кстати несмотря на такой простой, на первый вгляд вопрос, тут есть много интересных нюансов. Например как хранить адреса. В одной таблице, в привязанной 1:N, в строке, выбирать страны-города из справочников или нет, поддерживать структуру КЛАДР или нет...

Кто может поделиться соображениями?
...
Рейтинг: 0 / 0
30.03.2006, 18:12
    #33636015
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
Estetsучитывая что больше трех телефонов никому не нужно
Хм. Странное утверждение :)

EstetsНапример как хранить адреса. В одной таблице, в привязанной 1:N, в строке, выбирать страны-города из справочников или нет, поддерживать структуру КЛАДР или нет...
И для какой задачи? Имхо бессмысленно говорить об этом "вообще". И кстати есть еще более интересные ньюансы: например, коллеги, работающие сейчас на проекте по Data Hub в одном официальном учреждении, рассказывают, что в "тех базах" поле адреса помимо уймы более или менее ожидаемых прелестей еще и использовалось операторами для хранения комментариев.

Скажем, у меня была задача к организации хранить список из нескольких ее сотрудников с должностями-телефонами. Вводить этих сотрудников как физлиц не хотелось; в итоге была сделана одна табличка типа имя-должность-телефон. При этом справочник должностей формировался как select distinct должность from этатаблица; пользователь мог вбить новую строку, мог выбрать любую из ранее использовавшихся. Ну и разумеется был волен опечатываться там, пять раз вводить одно и то же - решили, что в подобной сугубо комментарной информации формализация-верификация ни к чему.
...
Рейтинг: 0 / 0
30.03.2006, 18:43
    #33636087
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
softwarer
Хм. Странное утверждение :)
Не помню флейм, можно сказать так "конечное количество соответствующее ТЗ" ;)

softwarer EstetsНапример как хранить адреса. В одной таблице, в привязанной 1:N, в строке, выбирать страны-города из справочников или нет, поддерживать структуру КЛАДР или нет...
И для какой задачи? Имхо бессмысленно говорить об этом "вообще". И кстати есть еще более интересные ньюансы: например, коллеги, работающие сейчас на проекте по Data Hub в одном официальном учреждении, рассказывают, что в "тех базах" поле адреса помимо уймы более или менее ожидаемых прелестей еще и использовалось операторами для хранения комментариев.
Ну в этом тоже есть некоторая ошибка программистов, значит не было предусмотрено поле комментарий для партнера.
softwarer
Скажем, у меня была задача к организации хранить список из нескольких ее сотрудников с должностями-телефонами. Вводить этих сотрудников как физлиц не хотелось; в итоге была сделана одна табличка типа имя-должность-телефон.
Я не собираюсь строить супер-универсальную систему для учета партнеров, но полезно иметь базовую структуру, для ее хранения в которой учтены хотя бы некоторые грабли из других проектов.

Например у нас адрес хранится строкой, за исключением индекса и страны (справочник), соответственно для печати использовалась структура:
Код: plaintext
<Наименование страны> + ', ' + <Индекс> + ', ' + <Адрес>
Но буквально недавно один из клиентов вернул нам счет-фактуру на основании того что в поле "адрес" должен попадать такой адрес как он указан в учередительных документах. А у него в документах слов "Российская федерация" нет ;-(.

И вот пришлось написать заглушку:
если клиент = <...> то при печати из адреса вырезать слово "Российская федерация".
...
Рейтинг: 0 / 0
30.03.2006, 18:48
    #33636101
proposed amendment
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
EstetsИ вот пришлось написать заглушку

вот потому-то и храним юр. адрес одной строкой - как в уставных
...
Рейтинг: 0 / 0
30.03.2006, 18:52
    #33636103
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Одна большая таблица или несколько маленьих?
EstetsЯ не собираюсь строить супер-универсальную систему для учета партнеров, но полезно иметь базовую структуру, для ее хранения в которой учтены хотя бы некоторые грабли из других проектов.
Хм. Например, Вы описали конкретные грабли, где совершенно справедливо говорите о хранении адреса строкой. Давайте теперь помедитируем о CRM-системе с естественной задачей анализа клиентской базы. Хранение адреса строкой для этого случая очевидно непригодно. Вывод: либо таки придется реализовывать некий универсальный комбинированный вариант, либо опаньки, вопрос бессмысленен, надо смотреть по месту.

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


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