ФорумРазработкаБазы данных → Помогите правильно организовать структуру БД

Помогите правильно организовать структуру БД

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 14 января 2011 г. 15:12

    В прикрепленном файле показана форма заполнения данных о программе кредитования.
    Там на самом деле еще штук 5 пунктов, которые не влезли на экран.

    По этим программам будет производиться поиск.

    Собственно говоря как поступить?
    Можно все запихнуть в 1 таблицу, даже пункты "Квартира, комната, гараж" и таких пунктов будет много, или делать через связанную таблицу, тогда будет много JOIN.

    Можно какие то пункты через JOIN а какие то в таблицу.

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

    Лично я склоняюсь к JOIN. Пока я их насчитал 6 штук.
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 14 января 2011 г. 15:19, спустя 6 минут 53 секунды

    Если пунктов выбора конечное число, я бы обозначил их степенями двойки и в одну ячейку таблицы писал "побитовое или" комбинации.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 14 января 2011 г. 15:43, спустя 24 минуты 29 секунд

    AlexB, а можно по подробней про алгоритм хранения данных таким способом? Я чего-то не совсем в курсе. Может ссылочку, или текст для запроса к яше?
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 14 января 2011 г. 15:54, спустя 10 минут 50 секунд

    >или делать через связанную таблицу, тогда будет много JOIN.
    по идее грамотнее будет по 3нф, а для скорости используй innodb и внешние ключи
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 15 января 2011 г. 5:16, спустя 13 часов 21 минуту 40 секунд


    AlexB, а можно по подробней про алгоритм хранения данных таким способом? Я чего-то не совсем в курсе. Может ссылочку, или текст для запроса к яше?
    А чего там особенного.
    Гаражи
    $a1 = 1;
    Кваритры
    $a2 = 2;
    Дома
    $a3 = 4;
    Виллы
    $a4 = 8;

    Любое сочетание типа
    $result = $a1 | $a3 | $a4;
    коммутативно и даст в $result уникальное число.
    Недостаток - быстро заканчиваются степени двойки, влезающие в int.
  • Sinkler

    Сообщения: 7941 Репутация: N Группа: в ухо

    Spritz 15 января 2011 г. 5:18, спустя 2 минуты 13 секунд

    я бы обозначил их степенями двойки

    вспомнился jscript, там атрибуты файлам так же задаются, степень двойки - к-либо атрибут, поставить +число, убарть -число…
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 15 января 2011 г. 5:26, спустя 8 минут 12 секунд

    Да это вообще очень распространенный способ, если перевести числса в двоичную чистему и писать друг под другом - становится понятно как это работает. Единичка в любом столбце может быть только одна, поэтому сочетание всегда уникально.
  • phpdude

    Сообщения: 26639 Репутация: N Группа: в ухо

    Spritz 15 января 2011 г. 5:31, спустя 4 минуты 41 секунду


    Да это вообще очень распространенный способ, если перевести числса в двоичную чистему и писать друг под другом - становится понятно как это работает. Единичка в любом столбце может быть только одна, поэтому сочетание всегда уникально.
    ага, и большой плюс - в 1 байт можно записать аж сразу 8!!! значений)

    глваное поиск по ним не делать, если идет ситуация про базу
    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 15 января 2011 г. 10:43, спустя 5 часов 12 минут 9 секунд


    А чего там особенного.
    Гаражи
    $a1 = 1;
    Кваритры  
    $a2 = 2;
    Дома
    $a3 = 4;
    Виллы  
    $a4 = 8;

    Любое сочетание типа
    $result = $a1 | $a3 | $a4;
    коммутативно и даст в $result уникальное число.
    Недостаток - быстро заканчиваются степени двойки, влезающие в int.


    Извини, все равно не пойму.
    Ну вот есть у меня какое то уникальное число. А как мне поиск по этой колонке осуществить?
    Ну вот $result = $a1 | $a3 | $a4;
    получаю число 13

    нужно найти все значения где пользователь выбрал "Гаражи" то есть $a1 = 1;

    И как мне SQL запрос написать?
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 15 января 2011 г. 12:14, спустя 24 минуты 30 секунд

    Эх, никто меня не понимает =(
  • AlexB

    Сообщения: 4292 Репутация: N Группа: в ухо

    Spritz 15 января 2011 г. 15:16, спустя 3 часа 2 минуты 30 секунд


    Эх, никто меня не понимает =(
    Да понимаю я тебя прекрасно
    В мускуле тоже есть побитовые операции
    http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html
    т.е. сделав "побитовое и" с требуемым значение ты получишь строго 0 или 1 - есть оно или нет.
    другой вопрос будет ли запрос быстро работать, надо проверить, но подозреваю что будет фулл скан …
    просто я не понял, что надо искать строго по одному значению, вот по любому сочетанию будет все отлично … а по одному значению … щас пьян но завтра еще подумаю, есть ли способ …
    Спустя 160 сек.
    уберите нахуй эту силу слова, бля
    чем больше объясняешь тем сильнее падает … в принципе похуй, но все-равно не честно… пиздец я набрался
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 15 января 2011 г. 15:26, спустя 9 минут 30 секунд

    чем больше объясняешь тем сильнее падает … в принципе похуй, но все-равно не честно… пиздец я набрался

    все оправдано

    значит хуево объясняешь, раз одного сообщения не достаточно
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 15 января 2011 г. 15:27, спустя 1 минуту 38 секунд

    пиздец, так а я на что ссылку дал?
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 15 января 2011 г. 16:07, спустя 40 минут 2 секунды

    Абырвалг, ты пример покажи.
    Ну вот по ссылке

    Bitwise OR:

    mysql> SELECT 29 | 15;
    -> 31

    The result is an unsigned 64-bit integer.

    Что я из этого вынести должен относительно моей задачи? Я чет не понимаю.

    AlexB, да, если искать по целому сочетанию то конечно, тогда все просто. Но тут в программе можно указать валюту(рубли, евро, франки) которые выдаются в рамкаж этой программы, а при поиске человек хочет выбрать все программы где есть рубли.
    Это как метки. Только таких меток очень много типов. Собственно и много JOIN, собственно возвращаемся к изначальному вопросу.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!