Необходимо написать калькулятор расчета стоимости для фотопечати. Цена печати зависит от трех факторов 1) Какая используется бумага( вся бумага может быть всех форматов) 2)Формат бумаги 3)Тираж ( у разных форматов разные) Я создаю 4 таблицы: 1) Форматы 2) Бумаги 3) Тиражи 4) Цены Про первичные ключи: Получаеться связи следующие: Так как цена зависит от всех факторов, то в таблице "Цены" есть id цена, id бумага, id формат, id тираж. В таблице бумага есть только id бумага. В таблице форматы есть id формата. В таблице тиражи id тиража и id формата. Вот тут и возикает круговая связь то есть Форматы - Тиражи - Цены - Форматы. Не знаю как о нее избавиться ?
Во-первых, в таблице "тиражи" - только тиражи, и никак иначе. Между тиражами и форматами связь "многие-ко-многим" (у одного тиража несколько форматов, у одного формата - несколько тиражей). Многие-ко-многим делается через вспомогательную таблицу, там будет id тиража и id формата - это будет первичный ключ, но лучше сделать его просто уникальным и ввести сурогатный первичный ключ (т.е. еще одно поле с автоинкремент id). Тогда таблица цен будет завязана на таблицу бумаги и эту таблицу-связку. А можно/лучше просто выкинуть эту таблицу связку, и связывать через таблицу цен. У невозможных пар тираж/формат просто не будет цены.
Ну к примеру у меня у формата Вот имеющиеся тиражи А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 итд. У меня не получиться связь многие ко многим. Так как тиражи разные.
тогда вам вообще не нужна таблица тиражей таблица цен будет такая id_бумаги id_формата количество_от цена так как тираж ограничен лишь минимальным, но не ограничен максимальным и представляет собой непрерывный ряд целых чисел - достаточно одного поля
вот примерная таблица, которую нужно перевести в mysql Добавлено спустя 2 минуты 33 секунды: Например 1) тираж 5 - 9 имеет и максимальное и минимальное значение
Имеется ввиду все возможные значения тиражей не ограничены. Можно хранить в базе "тираж от" и "тираж до", но это избыточно, достаточно "тираж от".
Если я храню только от, то к примеру клиент вводит 14 ( 1) тираж 5 - 9 2) тираж 10 - 29 ) Попадает (к примеру) в этом случае 2 условия. от 5 от 10 То мне будет сложно выбрать одно так, что лучше хранить два от и до.