|
|
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Задача: Нужно сделать следующую БД и софт. Есть пользователь, он может заполнять ряд анкет. Существует множество (заранее известное но большое) видов этих анкет. Но пользователю не нужно заполнять все анкеты, обычно 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". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 16:23 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Оба варианта не годятся. Я в свое время делал так: Пользователи Анкеты ВопросыВАнкете ВариантыОтветовНаВопрос (для выберите ... из ...) ОтветыПользователейНаВопросы (заполнение анкеты) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 16:34 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительОба варианта не годятся. Я в свое время делал так: Пользователи Анкеты ВопросыВАнкете ВариантыОтветовНаВопрос (для выберите ... из ...) ОтветыПользователейНаВопросы (заполнение анкеты) Это слишком общее, куча инфы в БД, и прочитать что либо очень тяжко, куча кода. Зачем когда уже зарание известно сколько анкет, и какие в них поля. Прост погрязнуть в отладке изначально простой программы не хочется, к томуже поля форм к такой структуре прикрутить это тож эпопея, да ещё и все типы полей придется в бд забивать. Или делать уже универсальный генератор форм. Короч. не хочется всё так усложнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 16:42 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
И что там сложного ? Вам придется под каждую анкету отдельную форму делать. И потом будет просто зашибись запросами результаты ваших анкет обрабатывать. Не хотите - делайте по-своему. Для каждой анкеты, заполненной каждым пользователем - отдельную табличку! Я высказал свое мнение, что ваш подход совершенно не приемлем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 16:46 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
солидарен с Программист-Любитель . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 16:47 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 16:56 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
А мне ни хрена не нравицца! Я - лесбиян. Баб люблю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 17:04 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
хм... Тогда поставим вопрос так: возникнут ли проблемы с производительностью при использовании таблицы с множеством столбцов, по сравнению с вариантом с выделением необязателных полей в отдельные таблицы и свази их 1:1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 17:32 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Давайте-ка вы лучше сначала сормулируете критерии "правильности" делания структуры БД. Два предложенных вами варианта не удовлетворяют требованиям 3 нормальной формы - уже веский повод вынести вердикт "неправильная" структура. Вот это "Это слишком общее, куча инфы в БД, и прочитать что либо очень тяжко, куча кода." - ваще перл. В ваших таблицах как раз и будет куча. Дурно пахнущая. И потребуется куча кода чтобы ее как-то обработать. Нормально реляционно раскузюканные таблицы джоинить не проблема. Пайвотом получиться любай из форм по вашему эскизу. Любое сечение или агрегат достануться мгновенно. А по вашим юнионы и кейзв писать затрахаешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2011, 17:44 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительДавайте-ка вы лучше сначала сормулируете критерии "правильности" Под правильностью я подразумеваю скорость работы, количество передаваемых данных. Вам же я советую использовать в своих БД идеальную универсальную структуру. Четыре таблицы на любой случай жизни. Это "Таблица", "Столбец", "Строка" и "Ячейка". Используя эту структуру вы сможете формализовать в ее рамках любую БД используя всего четыре таблицы. И конечно погрязнете в километровых запросах, ну это же так правильно, и вы так к этому стремитесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2011, 15:34 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительВ ваших таблицах как раз и будет куча. Дурно пахнущая. И потребуется куча кода чтобы ее как-то обработать.+1 palich12Под правильностью я подразумеваю скорость работы, количество передаваемых данных.Непонятна цель первого поста, если у вас уже есть 100% правильная с вашей точки зрения модель данных и её изменение исключено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2011, 17:09 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
alexeyvgесли у вас уже есть 100% правильная с вашей точки зрения модель данных и её изменение исключено. Я не утверждаю что моя можель 100% правильная, просто веду дискуссию. Господин Программист-Любитель предложил свой вариант, я ответил что на мой взгляд он более трудоемок и не имеет никаких видимых преимуществ, так же спорен тезис о не соответствии 3 нормальной форме. Если я заранее знаю что у меня будет например 5 различных сущностей, то зачем строить конструкцию из таблицы "Сущность", "Свойство Сущности" и "Значение свойства сущности", когда можно создать 5 конкретных таблиц без абстракций, а в данном случае возможно всего одну. Может смысл в этом и есть, но в место приведения аргументов господин Программист-Любитель скатился до откровенного Трола. А я просто продемонстрировал на примере, до чего может довести бездумное абстрагирования всего на свете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2011, 18:40 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
palich12Я не утверждаю что моя можель 100% правильная, просто веду дискуссию. Господин Программист-Любитель предложил свой вариант, я ответил что на мой взгляд он более трудоемок и не имеет никаких видимых преимуществ, так же спорен тезис о не соответствии 3 нормальной форме.Присоединяюсь к варианту Программист-Любитель, только ВариантыОтветовНаВопрос может быть не нужна (зависит от бизнес-логики). palich12Если я заранее знаю что у меня будет например 5 различных сущностей, то зачем строить конструкцию из таблицы "Сущность", "Свойство Сущности" и "Значение свойства сущности", когда можно создать 5 конкретных таблиц без абстракцийСовершенно верно. Так вот, Анкета1 и Анкета2 - это не 2 разные сущности, и не атрибут сущности Пользователь (впрочем, как и ответы на вопросы) :-) palich12а в данном случае возможно всего одну.И почему-же именно в этом случае для нескольких бизнес-сущностей правильно создать одну сущность в модели данных? Вы думаете, для чего вообще придуманы нормальные формы: для увеличения трудоёмкости, понижения скорости, усложнения запросов и повышения количества ошибок в данных? Так, что ли??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2011, 20:24 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
alexeyvgИ почему-же именно в этом случае для нескольких бизнес-сущностей правильно создать одну сущность в модели данных? Дело в том что каждый пользователь всегда может иметь только один экземпляр заполненной анкеты, то есть связь 1:1. Мы же не делаем отдельную таблицу например для Фамилий пользователя т. к. знаем что у него она всегда одна. alexeyvgИ почему-же именно в этом случае для нескольких бизнес-сущностей правильно создать одну сущность в модели данных? Вы думаете, для чего вообще придуманы нормальные формы: для увеличения трудоёмкости, понижения скорости, усложнения запросов и повышения количества ошибок в данных? Так, что ли??? Нет не думаю, предложенные мной варианты ответствуют нормальным формам, иначе бы я не спрашивал, ибо осознанный говнокод грех. PS Под давлением общественного мнения начинаю склонятся к варианту от Программист-Любитель, не хочется быть самодуром. Но пока всетаки не увидел обоснованного аргумента в его пользу. Хотя уже сам хочу его найти и успокоится =). Все таки я не понимаю зачем засовывать перечисление Анкет в отдельную таблицу если заранее известно, что их число меняться не будет и связь 1:1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2011, 10:37 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
palich12 Под давлением общественного мнения начинаю склонятся к варианту от Программист-Любитель, не хочется быть самодуром. Но пока всетаки не увидел обоснованного аргумента в его пользу. Хотя уже сам хочу его найти и успокоится =). Все таки я не понимаю зачем засовывать перечисление Анкет в отдельную таблицу если заранее известно, что их число меняться не будет и связь 1:1 авторСуществует множество (заранее известное но большое) видов этих анкет Сущность = таблица. Анкеты - сущность ? Да, причем важная. Люди - сущность ? Да, и тоже одна из основных. А вы им таблицы жалеете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2011, 20:37 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительОба варианта не годятся. Я в свое время делал так: Пользователи Анкеты ВопросыВАнкете ВариантыОтветовНаВопрос (для выберите ... из ...) ОтветыПользователейНаВопросы (заполнение анкеты) а как же быть с общими вопросами в анкетах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2011, 17:42 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Программист-Любитель Сущность = таблица. Анкеты - сущность ? Да, причем важная. Люди - сущность ? Да, и тоже одна из основных. А вы им таблицы жалеете... Да вот в том то и дело что я не желею таблиц, а наоборот хочу каждой анкете по таблице дать, ибо их число в дальнейшем менятся не будет, но тогда возникает факт что эти таблицы будут связаны с Пользователь 1:1 но тогда их проще совместить с таблицей Пользователь путем переноса их столбцов в эту таблицу. Собственно я уже разобрался в проблеме и нашел решение: 1) Если задача поставлена так как она поставлена, наиболее правильным будет вариант 1) т. к. сложность структуры бд и как следствие ошибкоемкость, будут минимальными, и это благотворно скажется на производительности СУБД 2) Если есть хоть малейший намек, что в будущем понадобится динамически добавлять удалять анкеты или менять их структуру, либо пользователи смогу одновременно иметь несколько версий одной анкеты, то нужно действовать по принципу предложенному Программист-Любитель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2011, 15:41 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
palich12, также посмотртите в сторону вынесения общих вопросов в родительские сущности, если это позволяет бизнес-логика приложения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2011, 19:37 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
palich12alexeyvgесли у вас уже есть 100% правильная с вашей точки зрения модель данных и её изменение исключено. Я не утверждаю что моя можель 100% правильная, просто веду дискуссию. Господин Программист-Любитель предложил свой вариант, я ответил что на мой взгляд он более трудоемок и не имеет никаких видимых преимуществ, так же спорен тезис о не соответствии 3 нормальной форме. Если я заранее знаю что у меня будет например 5 различных сущностей, то зачем строить конструкцию из таблицы "Сущность", "Свойство Сущности" и "Значение свойства сущности", когда можно создать 5 конкретных таблиц без абстракций, а в данном случае возможно всего одну. Может смысл в этом и есть, но в место приведения аргументов господин Программист-Любитель скатился до откровенного Трола. А я просто продемонстрировал на примере, до чего может довести бездумное абстрагирования всего на свете. )))))) почему вместо того чтобы послушать знающего человека который говорит вам дело вы начинаете скажем так баловаться так как вы предлагаете не делается самая гл ошибка - ваше утверждение про "Если я заранее знаю что у меня будет например 5 различных сущностей" - вы студент? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2011, 20:33 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
koJIo6okсамая гл ошибка - ваше утверждение про "Если я заранее знаю что у меня будет например 5 различных сущностей" - вы студент? ) Нет я не студент, мало того, я имею достаточно большой опыт коммерческой разработки ПО. Читайте топик внимательнее. Дело в том что предложенный Программистом-Любителем вариант слишком общий, а значит более трудоемкий и более ошибкоемкий, для коммерческой разработки это важно. Поэтому, если есть определенные ограничения в конкретной задаче, то их надо использовать. Ибо: 1 сущность = 1 условная единица времени на реализацию 2 с. = 3 у. е. - ибо добавилась сущность связи 3 с. = 6 у. е. улавливаете разницу. Короче читайте мой предыдущий пост, там подведен итог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2011, 09:55 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
ну что тут скажешь - успехов ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2011, 10:18 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
palich12Нет я не студент, мало того, я имею достаточно большой опыт коммерческой разработки ПО. Читайте топик внимательнее. Дело в том что предложенный Программистом-Любителем вариант слишком общий, а значит более трудоемкий и более ошибкоемкий, для коммерческой разработки это важно. Поэтому, если есть определенные ограничения в конкретной задаче, то их надо использовать. Ибо: 1 сущность = 1 условная единица времени на реализацию 2 с. = 3 у. е. - ибо добавилась сущность связи 3 с. = 6 у. е. улавливаете разницу. Короче читайте мой предыдущий пост, там подведен итог. Мне как человеку, которому не раз приходилось "убирать дерьмо" за программистами которые думают как Вы, все же нравиться подход "Программиста-Любителя". Т.к. кода в том случае кода писать приходится в разы меньше, а уж сопровождать вообще легко. В вашем случае при любом изменении нужно писать гору кода (хотя и копипаст). Потом при изменении логики с помощью Find/Replace заменять (минимальные знания регекспа приветствуются) кучу однообразного кода. И вообще подход, который Вы предлагаете пользовался широкой популярностью во времена xBase. Как-то со времени внедрения SQL работа с БД стала более удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2011, 11:42 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
Чего-то "за" идеи ТС никто не высказался... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2011, 12:25 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
mad_nazgulВ вашем случае при любом изменении нужно писать гору кода (хотя и копипаст). Ещё раз, внимательно читаем предыдущий пост, там написано ровно тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2011, 16:43 |
|
||
|
Помогите правильно сделать структуру БД
|
|||
|---|---|---|---|
|
#18+
palich12, ежели сам мастер - наф топик так называется - - Помогите правильно сделать структуру БД так бы и обозначил - - сам знаю как правильно сделать структуру БД , поэтому сделаю по-своему .... но все-равно всем спасибо... типа ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2011, 17:32 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37354764&tid=1542069]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
205ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 560ms |

| 0 / 0 |
