За последние 24 часа нас посетили 44660 программистов и 1807 роботов. Сейчас ищут 1056 программистов ...

Как избавиться от круговой связи

Тема в разделе "PHP и базы данных", создана пользователем RazerVG, 4 фев 2015.

  1. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Необходимо написать калькулятор расчета стоимости для фотопечати.

    Цена печати зависит от трех факторов

    1) Какая используется бумага( вся бумага может быть всех форматов)

    2)Формат бумаги

    3)Тираж ( у разных форматов разные)

    Я создаю 4 таблицы:

    1) Форматы

    2) Бумаги

    3) Тиражи

    4) Цены

    Про первичные ключи:

    Получаеться связи следующие: Так как цена зависит от всех факторов, то в таблице "Цены" есть id цена, id бумага, id формат, id тираж.

    В таблице бумага есть только id бумага. В таблице форматы есть id формата. В таблице тиражи id тиража и id формата.

    Вот тут и возикает круговая связь то есть Форматы - Тиражи - Цены - Форматы. Не знаю как о нее избавиться ?
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Во-первых, в таблице "тиражи" - только тиражи, и никак иначе.
    Между тиражами и форматами связь "многие-ко-многим" (у одного тиража несколько форматов, у одного формата - несколько тиражей).
    Многие-ко-многим делается через вспомогательную таблицу, там будет id тиража и id формата - это будет первичный ключ, но лучше сделать его просто уникальным и ввести сурогатный первичный ключ (т.е. еще одно поле с автоинкремент id).
    Тогда таблица цен будет завязана на таблицу бумаги и эту таблицу-связку.

    А можно/лучше просто выкинуть эту таблицу связку, и связывать через таблицу цен. У невозможных пар тираж/формат просто не будет цены.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Валюта плюс множители =)
     
  4. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Ну к примеру у меня у формата

    Вот имеющиеся тиражи
    А1

    1) тираж 5 - 9
    2) тираж 10 - 29
    3) от 30

    А2

    1) от 10 до 18
    2) от 19 до 58
    3) от 59

    А3

    1) от 20 до 36
    2) от 37 до 116
    3) от 116

    итд.

    У меня не получиться связь многие ко многим. Так как тиражи разные.
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    тогда вам вообще не нужна таблица тиражей
    таблица цен будет такая
    id_бумаги
    id_формата
    количество_от
    цена

    так как тираж ограничен лишь минимальным, но не ограничен максимальным и представляет собой непрерывный ряд целых чисел - достаточно одного поля
     
  6. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    [​IMG]

    вот примерная таблица, которую нужно перевести в mysql

    Добавлено спустя 2 минуты 33 секунды:
    Например 1) тираж 5 - 9 имеет и максимальное и минимальное значение
     
  7. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Имеется ввиду все возможные значения тиражей не ограничены.
    Можно хранить в базе "тираж от" и "тираж до", но это избыточно, достаточно "тираж от".
     
  8. RazerVG

    RazerVG Активный пользователь

    С нами с:
    5 дек 2013
    Сообщения:
    103
    Симпатии:
    0
    Если я храню только от, то к примеру клиент вводит 14 ( 1) тираж 5 - 9 2) тираж 10 - 29 )
    Попадает (к примеру) в этом случае 2 условия.
    от 5
    от 10

    То мне будет сложно выбрать одно так, что лучше хранить два от и до.
     
  9. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    сортировка по количеству DESC, условие "значение больше тираж_от" и limit 1
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям