powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно сделать структуру БД
25 сообщений из 34, страница 1 из 2
Помогите правильно сделать структуру БД
    #37352079
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Задача:
Нужно сделать следующую БД и софт. Есть пользователь, он может заполнять ряд анкет. Существует множество (заранее известное но большое) видов этих анкет. Но пользователю не нужно заполнять все анкеты, обычно 1-2. Версия одной анкеты у пользователя всегда одна. Тоесть если Пользователь не может создавать 2 экземпляра одной анкеты.
Вопрос:
Какая структура БД правильная?

Варианты ответов:

1) Всего одна таблица Пользователь c множеством полей вида:
ID_Пользователя
Анкета1_Поле1
Анкета1_Поле2
...
Анкета1_ПолеN
Анкета2_Поле1
...

2) Таблица Пользователь с полем ID_Пользователя
И множество таблиц вида Анкета1, Анкета2, Анкета3 ... с соответсвующими полями и связью с таблицей Пользователь 1:1

P.S.
Использую MS SQL 2008 R2. Склоняюсь к первому варианту, т. к. он более прост, но несть сомнения в эффективности, всетаки будет много пустых ячеек в записях, на сколько это плохо?

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

Я в свое время делал так:

Пользователи
Анкеты
ВопросыВАнкете
ВариантыОтветовНаВопрос (для выберите ... из ...)
ОтветыПользователейНаВопросы (заполнение анкеты)
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352148
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительОба варианта не годятся.

Я в свое время делал так:

Пользователи
Анкеты
ВопросыВАнкете
ВариантыОтветовНаВопрос (для выберите ... из ...)
ОтветыПользователейНаВопросы (заполнение анкеты)

Это слишком общее, куча инфы в БД, и прочитать что либо очень тяжко, куча кода. Зачем когда уже зарание известно сколько анкет, и какие в них поля. Прост погрязнуть в отладке изначально простой программы не хочется, к томуже поля форм к такой структуре прикрутить это тож эпопея, да ещё и все типы полей придется в бд забивать. Или делать уже универсальный генератор форм. Короч. не хочется всё так усложнять.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352157
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что там сложного ?

Вам придется под каждую анкету отдельную форму делать. И потом будет просто зашибись запросами результаты ваших анкет обрабатывать.

Не хотите - делайте по-своему. Для каждой анкеты, заполненной каждым пользователем - отдельную табличку!

Я высказал свое мнение, что ваш подход совершенно не приемлем.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352165
sergei64_89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
солидарен с Программист-Любитель .
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352184
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergei64_89солидарен с Программист-Любитель .
Нет, вы не поняли, не для каждой анкеты каждого пользователя, а только для каждой анкеты, то есть Напимер:

User
ID Name
1 Ваня
2 Петя

form1
UserID Field1 Field2
1 <xxx> <xxx>
2 Null Null



form2
UserID Field1 Field2
1 <xxx> <xxx>
2 <xxx> <xxx>


А вообще мне больше нравится такой вариант:
User
ID Name form1Field1 form1Field2 form2Field1 form1Field2
1 Ваня <xxx> <xxx> <xxx> <xxx>
2 Петя Null Null <xxx> <xxx>
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352201
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне ни хрена не нравицца! Я - лесбиян. Баб люблю...
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352257
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм...
Тогда поставим вопрос так:
возникнут ли проблемы с производительностью при использовании таблицы с множеством столбцов, по сравнению с вариантом с выделением необязателных полей в отдельные таблицы и свази их 1:1
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37352275
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте-ка вы лучше сначала сормулируете критерии "правильности" делания структуры БД. Два предложенных вами варианта не удовлетворяют требованиям 3 нормальной формы - уже веский повод вынести вердикт "неправильная" структура.

Вот это "Это слишком общее, куча инфы в БД, и прочитать что либо очень тяжко, куча кода." - ваще перл. В ваших таблицах как раз и будет куча. Дурно пахнущая. И потребуется куча кода чтобы ее как-то обработать.

Нормально реляционно раскузюканные таблицы джоинить не проблема. Пайвотом получиться любай из форм по вашему эскизу. Любое сечение или агрегат достануться мгновенно. А по вашим юнионы и кейзв писать затрахаешься.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37353722
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительДавайте-ка вы лучше сначала сормулируете критерии "правильности"

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

Вам же я советую использовать в своих БД идеальную универсальную структуру. Четыре таблицы на любой случай жизни. Это "Таблица", "Столбец", "Строка" и "Ячейка". Используя эту структуру вы сможете формализовать в ее рамках любую БД используя всего четыре таблицы. И конечно погрязнете в километровых запросах, ну это же так правильно, и вы так к этому стремитесь.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37353941
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительВ ваших таблицах как раз и будет куча. Дурно пахнущая. И потребуется куча кода чтобы ее как-то обработать.+1
palich12Под правильностью я подразумеваю скорость работы, количество передаваемых данных.Непонятна цель первого поста, если у вас уже есть 100% правильная с вашей точки зрения модель данных и её изменение исключено.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37354116
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgесли у вас уже есть 100% правильная с вашей точки зрения модель данных и её изменение исключено.
Я не утверждаю что моя можель 100% правильная, просто веду дискуссию. Господин Программист-Любитель предложил свой вариант, я ответил что на мой взгляд он более трудоемок и не имеет никаких видимых преимуществ, так же спорен тезис о не соответствии 3 нормальной форме. Если я заранее знаю что у меня будет например 5 различных сущностей, то зачем строить конструкцию из таблицы "Сущность", "Свойство Сущности" и "Значение свойства сущности", когда можно создать 5 конкретных таблиц без абстракций, а в данном случае возможно всего одну. Может смысл в этом и есть, но в место приведения аргументов господин Программист-Любитель скатился до откровенного Трола. А я просто продемонстрировал на примере, до чего может довести бездумное абстрагирования всего на свете.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37354229
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12Я не утверждаю что моя можель 100% правильная, просто веду дискуссию. Господин Программист-Любитель предложил свой вариант, я ответил что на мой взгляд он более трудоемок и не имеет никаких видимых преимуществ, так же спорен тезис о не соответствии 3 нормальной форме.Присоединяюсь к варианту Программист-Любитель, только ВариантыОтветовНаВопрос может быть не нужна (зависит от бизнес-логики).

palich12Если я заранее знаю что у меня будет например 5 различных сущностей, то зачем строить конструкцию из таблицы "Сущность", "Свойство Сущности" и "Значение свойства сущности", когда можно создать 5 конкретных таблиц без абстракцийСовершенно верно.
Так вот, Анкета1 и Анкета2 - это не 2 разные сущности, и не атрибут сущности Пользователь (впрочем, как и ответы на вопросы) :-)

palich12а в данном случае возможно всего одну.И почему-же именно в этом случае для нескольких бизнес-сущностей правильно создать одну сущность в модели данных?

Вы думаете, для чего вообще придуманы нормальные формы: для увеличения трудоёмкости, понижения скорости, усложнения запросов и повышения количества ошибок в данных? Так, что ли???
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37354525
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgИ почему-же именно в этом случае для нескольких бизнес-сущностей правильно создать одну сущность в модели данных?

Дело в том что каждый пользователь всегда может иметь только один экземпляр заполненной анкеты, то есть связь 1:1.
Мы же не делаем отдельную таблицу например для Фамилий пользователя т. к. знаем что у него она всегда одна.

alexeyvgИ почему-же именно в этом случае для нескольких бизнес-сущностей правильно создать одну сущность в модели данных?

Вы думаете, для чего вообще придуманы нормальные формы: для увеличения трудоёмкости, понижения скорости, усложнения запросов и повышения количества ошибок в данных? Так, что ли???

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

PS
Под давлением общественного мнения начинаю склонятся к варианту от Программист-Любитель, не хочется быть самодуром. Но пока всетаки не увидел обоснованного аргумента в его пользу. Хотя уже сам хочу его найти и успокоится =). Все таки я не понимаю зачем засовывать перечисление Анкет в отдельную таблицу если заранее известно, что их число меняться не будет и связь 1:1
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37354764
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12 Под давлением общественного мнения начинаю склонятся к варианту от Программист-Любитель, не хочется быть самодуром. Но пока всетаки не увидел обоснованного аргумента в его пользу. Хотя уже сам хочу его найти и успокоится =). Все таки я не понимаю зачем засовывать перечисление Анкет в отдельную таблицу если заранее известно, что их число меняться не будет и связь 1:1

авторСуществует множество (заранее известное но большое) видов этих анкет

Сущность = таблица.
Анкеты - сущность ? Да, причем важная.
Люди - сущность ? Да, и тоже одна из основных.
А вы им таблицы жалеете...
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37373423
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительОба варианта не годятся.

Я в свое время делал так:

Пользователи
Анкеты
ВопросыВАнкете
ВариантыОтветовНаВопрос (для выберите ... из ...)
ОтветыПользователейНаВопросы (заполнение анкеты)

а как же быть с общими вопросами в анкетах?
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37379009
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель
Сущность = таблица.
Анкеты - сущность ? Да, причем важная.
Люди - сущность ? Да, и тоже одна из основных.
А вы им таблицы жалеете...

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

Собственно я уже разобрался в проблеме и нашел решение:
1) Если задача поставлена так как она поставлена, наиболее правильным будет вариант 1) т. к. сложность структуры бд и как следствие ошибкоемкость, будут минимальными, и это благотворно скажется на производительности СУБД
2) Если есть хоть малейший намек, что в будущем понадобится динамически добавлять удалять анкеты или менять их структуру, либо пользователи смогу одновременно иметь несколько версий одной анкеты, то нужно действовать по принципу предложенному Программист-Любитель
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37379478
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12,

также посмотртите в сторону вынесения общих вопросов в родительские сущности, если это позволяет бизнес-логика приложения
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37379523
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12alexeyvgесли у вас уже есть 100% правильная с вашей точки зрения модель данных и её изменение исключено.
Я не утверждаю что моя можель 100% правильная, просто веду дискуссию. Господин Программист-Любитель предложил свой вариант, я ответил что на мой взгляд он более трудоемок и не имеет никаких видимых преимуществ, так же спорен тезис о не соответствии 3 нормальной форме. Если я заранее знаю что у меня будет например 5 различных сущностей, то зачем строить конструкцию из таблицы "Сущность", "Свойство Сущности" и "Значение свойства сущности", когда можно создать 5 конкретных таблиц без абстракций, а в данном случае возможно всего одну. Может смысл в этом и есть, но в место приведения аргументов господин Программист-Любитель скатился до откровенного Трола. А я просто продемонстрировал на примере, до чего может довести бездумное абстрагирования всего на свете.
))))))
почему вместо того чтобы послушать знающего человека который говорит вам дело вы начинаете скажем так баловаться
так как вы предлагаете не делается
самая гл ошибка - ваше утверждение про "Если я заранее знаю что у меня будет например 5 различных сущностей" - вы студент? )
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37379965
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
koJIo6okсамая гл ошибка - ваше утверждение про "Если я заранее знаю что у меня будет например 5 различных сущностей" - вы студент? )
Нет я не студент, мало того, я имею достаточно большой опыт коммерческой разработки ПО. Читайте топик внимательнее. Дело в том что предложенный Программистом-Любителем вариант слишком общий, а значит более трудоемкий и более ошибкоемкий, для коммерческой разработки это важно. Поэтому, если есть определенные ограничения в конкретной задаче, то их надо использовать.
Ибо:
1 сущность = 1 условная единица времени на реализацию
2 с. = 3 у. е. - ибо добавилась сущность связи
3 с. = 6 у. е.
улавливаете разницу.

Короче читайте мой предыдущий пост, там подведен итог.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37380008
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну что тут скажешь - успехов )))
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37380217
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12Нет я не студент, мало того, я имею достаточно большой опыт коммерческой разработки ПО. Читайте топик внимательнее. Дело в том что предложенный Программистом-Любителем вариант слишком общий, а значит более трудоемкий и более ошибкоемкий, для коммерческой разработки это важно. Поэтому, если есть определенные ограничения в конкретной задаче, то их надо использовать.
Ибо:
1 сущность = 1 условная единица времени на реализацию
2 с. = 3 у. е. - ибо добавилась сущность связи
3 с. = 6 у. е.
улавливаете разницу.

Короче читайте мой предыдущий пост, там подведен итог.

Мне как человеку, которому не раз приходилось "убирать дерьмо" за программистами которые думают как Вы, все же нравиться подход "Программиста-Любителя".
Т.к. кода в том случае кода писать приходится в разы меньше, а уж сопровождать вообще легко.
В вашем случае при любом изменении нужно писать гору кода (хотя и копипаст).
Потом при изменении логики с помощью Find/Replace заменять (минимальные знания регекспа приветствуются) кучу однообразного кода.

И вообще подход, который Вы предлагаете пользовался широкой популярностью во времена xBase.
Как-то со времени внедрения SQL работа с БД стала более удобно.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37380319
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то "за" идеи ТС никто не высказался...
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37380972
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulВ вашем случае при любом изменении нужно писать гору кода (хотя и копипаст).

Ещё раз, внимательно читаем предыдущий пост, там написано ровно тоже самое.
...
Рейтинг: 0 / 0
Помогите правильно сделать структуру БД
    #37381087
ZezaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12,
ежели сам мастер - наф топик так называется -
- Помогите правильно сделать структуру БД
так бы и обозначил -
- сам знаю как правильно сделать структуру БД ,
поэтому сделаю по-своему ....
но все-равно всем спасибо... типа ...
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно сделать структуру БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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