zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #30 : 12-01-2010 11:25 » |
|
Алексей1153++, не понял что ты своим постом #28 хочешь сказать?
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #31 : 12-01-2010 11:32 » |
|
zuze, а теперь наполни эти таблицы несколькими сотнями тысяч и посмотри план выполнения
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #32 : 12-01-2010 11:37 » |
|
т.е. cod's заранее известные значения? Все равно не понятно. У тебя cod's может принимать несколько значений.
1. Таблица авторов 2. Таблица кодов 3. Таблица соответствий кодов таблице авторав
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #33 : 12-01-2010 11:39 » |
|
а теперь наполни эти таблицы несколькими сотнями тысяч и посмотри план выполнения Вы хотите сказать, что будут жуткие торможения.
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #34 : 12-01-2010 11:42 » |
|
Sla, cod1 и cod2 это совершенно разные коды. cod1 может принимать одно или несколько значений и cod2 может принимать одно или несколько значений. Также cod1 или cod2 может быть пустым, но это крайне редко. Все значения в полях столбца cod1 и cod2 известны заранее.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #35 : 12-01-2010 11:44 » |
|
zuze, ты посмотри сначала на план, на стоимость, если тебя устроит то ради бога Кстате, можно сделать так по тому примеру что я приводил.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #36 : 12-01-2010 11:48 » |
|
zuze, я поясню. Тебе понадобится добавить еще, например, cod3 Будешь делать alter table?
Проще создать таблицу cod3, а таблицы cod2 и cod1 уже созданы, и привязать эту таблицу к таблице авторов, через таблицу параметров.
Если понадобится, то написать view, удовлетворяющую твоим требованиям.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #37 : 12-01-2010 12:30 » |
|
zuze, я предложил осмысленные названия к id_...
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #38 : 12-01-2010 13:29 » |
|
1. Таблица авторов 2. Таблица кодов 3. Таблица соответствий кодов таблице авторав
Я же такое писал в посте #29, но вот твои пункты 1 и 3 там совмещены в одну таблицу. Я так понял это не правильно, так как это будет медленно работать и надо их разделить. Я правильно тебе понял? И таблиц кодов у меня ни одна, а две.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #39 : 12-01-2010 13:36 » |
|
мне все равно сколько у тебя таблиц кодов
Основная таблица id name
таблица ПАРАМЕТРЫ название параметра значение параметра id записи которой принадлежит этот параметр.
Две таблицы, крути как хочешь
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #40 : 12-01-2010 19:50 » |
|
Ужас какой-то! Всем предлагаю в качестве наряда вне очереди дать определения нормальных форм вплоть до 3УНФ, объяснить, зачем и в каких случаях делается переход от формы к форме, и представить декомпозицию исходной таблицы по каждой нормальной форме.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
McZim
|
|
« Ответ #41 : 12-01-2010 20:05 » |
|
Dimka, н всегда нужны нормальные формы
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #42 : 12-01-2010 20:07 » |
|
У меня есть таблица: ------------------------------------------- |id | cod1 | cod2 | author | ------------------------------------------- |1 |88.1,81.2|771.09,77.1|petrov | |2 |88.1,83.2|771.09 |ivanov | |...|.... |.... |.... | |n |.... |.... |.... | ------------------------------------------- Но таблица в столбцах cod1 и cod2 не удовлетворяет первой нормальной форме (1НФ). 1НФ - требует, чтобы каждое значение атрибута или столбца было атомарным. Я это исправил так:Таблица2: --------------------------- |id | cod1 | author_id | --------------------------- |1 |88.1 |1 | |2 |81.2 |1 | |3 |88.1 |2 | |4 |83.2 |2 | --------------------------- Таблица3: --------------------------- |id | cod2 | author_id | --------------------------- |1 |771.09|1 | |2 |77.1 |1 | |3 |771.09|2 | --------------------------- Таблица1: -------------- |id | author | -------------- |1 |petrov | |2 |ivanov | -------------- Тогда SQL-запрос можно сделать так:SELECT a.cod1, b.cod2, c.author FROM Таблица2 AS a, Таблица3 AS b, Таблица1 AS c RIGHT JOIN Таблица2 AS a on a.author_id=c.id RIGHT JOIN Таблица3 AS b on b.author_id=c.id
А что делать, если у разных авторов может повторятся author_id в таблицах 2 и 3?Тогда же author_id в таблицах 2 и 3 не будет совпадает с id из таблицы 1. По требованию Dimka прочитано , в том числе и первый пост А что делать, если у разных авторов может повторяться author_id в таблицах 2 и 3?zuze, А как ты это представляешь?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #43 : 12-01-2010 20:41 » |
|
А что делать, если у разных авторов может повторяться author_id в таблицах 2 и 3? zuze, А как ты это представляешь?
Я это писал в посте #3, но напишу ещё раз ------------------------------------------- |id | cod1 | cod2 | author | ------------------------------------------- |1 |88.1,81.2|771.09,77.1|petrov | |2 |88.1,83.2|771.09 |ivanov | |3 |89 |200.01 |sushkin| |4 |88.1,81.2|200.01 |vilkin | ------------------------------------------- А вот и повторения о которых Вы спрашивали.Как видно из этой таблицы у авторов petrov и vilkin совпадает cod1, а следовательно будет совпадать author_id. Как видно из этой таблицы у авторов sushkin и vilkin совпадает cod2, а следовательно будет совпадать author_id. И что же в таком случае делать?Может можно обойтись без переделки таблиц, а добавить какие-то дополнительные условия в SQL-запросSELECT a.cod1, b.cod2, c.author FROM Таблица2 AS a, Таблица3 AS b, Таблица1 AS c RIGHT JOIN Таблица2 AS a on a.author_id=c.id RIGHT JOIN Таблица3 AS b on b.author_id=c.id
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #44 : 12-01-2010 20:52 » |
|
тогда скажи что такое author_id?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #45 : 12-01-2010 21:20 » |
|
тогда скажи что такое author_id? author_id - это идентификатор кода (cod1 и cod2) конкретного автора. И из-за того что author_id из Таблицы2 или Таблицы3 не всегда равен id Таблицы1 у меня возник вопрос, то ли SQL-запрос надо модифицировать, то ли таблицы иначе составлять.
|
|
« Последнее редактирование: 12-01-2010 21:23 от zuze »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #46 : 12-01-2010 21:51 » |
|
zuze, ужас!
По всем понятиям author_id — это идентификатор автора. Не кода!!! А потом уже к автору привязываются коды.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #47 : 12-01-2010 22:12 » |
|
По всем понятиям author_id — это идентификатор автора. Не кода!!! Если уж такая путаница с этими идентификаторами давайте их перепишем с нормальными названиями, что бы путаниц не было. Таблица2: ----------------------------------- |id_cod1 | cod1 | num_cod1 | ----------------------------------- | |1 |88.1 |1 | |2 |81.2 |1 | |3 |88.1 |2 | |4 |83.2 |2 | ----------------------------------- Таблица3: ----------------------------------- |id_cod2 | cod2 | num_cod2 | ----------------------------------- | |1 |771.09|1 | |2 |77.1 |1 | |3 |771.09|2 | ----------------------------------- Таблица1: ------------------------ |id_author | author | ------------------------ |1 |petrov | |2 |ivanov | ------------------------- Вот теперь author_id, обозначает, то как написал RXL.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #48 : 12-01-2010 22:21 » |
|
И теперь видно, что связь между таблицами отсутствует - требуется еще одна или две таблицы для связей. А num_cod1 и num_cod2 вообще не понятно для чего...
Вопрос: а какая СУБД используется?
|
|
« Последнее редактирование: 12-01-2010 22:23 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #49 : 12-01-2010 22:38 » |
|
Вопрос: а какая СУБД используется? mysql Если у меня всё так косо и криво я попробую привести ещё раз начальную таблицу и поясню её более подробно. ------------------------------------------- |id | cod1 | cod2 | author | ------------------------------------------- |1 |88.1,81.2|771.09,77.1|petrov | |2 |88.1,83.2|771.09 |ivanov | |3 |89 |200.01 |sushkin| |4 |88.1,81.2|200.01 |vilkin | |...|.... |.... |.... | |n |x,y |u,v |z | ------------------------------------------- Подробности:1. Я хочу эту таблицу нормализовать. 2. После столбца "author", есть ещё куча столбцов. Я их убрал для простоты примера, но каждое значение столбца связанно с другим значением другого столбца относящегося к конкретному автору (Например, есть столбец "Полное название учебного заведения"). 3. Значения в столбцах cod1, cod2 и author известны и вбиваются оператором, значения в столбце id генерируется СУБД. 4. В столбцах cod1 или cod2 значение относящаяся к конкретному автору может быть пустое. 5. Значения столбцов cod1 и cod2 у разных авторов может совпадать.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #50 : 13-01-2010 08:31 » |
|
Dimka, н всегда нужны нормальные формы Все наши беды от пуговицы. Специально повторяю ключевую фразу: ОБЪЯСНИТЬ, ЗАЧЕМ И В КАКИХ СЛУЧАЯХ ДЕЛАЕТСЯ ПЕРЕХОД ОТ ФОРМЫ К ФОРМЕ
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #51 : 13-01-2010 08:54 » |
|
ОБЪЯСНИТЬ, ЗАЧЕМ И В КАКИХ СЛУЧАЯХ ДЕЛАЕТСЯ ПЕРЕХОД ОТ ФОРМЫ К ФОРМЕ Я к сожалению знаю, только такое, что нормализация нужна, что бы избежать проблем при увеличении таблиц в будущим. А будут ли увеличиваться таблицы или нет в будущем это обычно заранее не известно. Если в моём случае можно не нормализировать таблицу, то могли бы Вы объяснить подробно почему, а если есть про все формы нормализации такая информация, я только буду рад её почитать. К сожалению в моих книгах кроме определения нормализации и их форм с примерами, не даны обоснования когда нужно нормализировать, а когда нет.
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #52 : 13-01-2010 10:26 » |
|
Разбейте по сущностям: Таблица авторов, таблица для cod1, для cod2 и сводная, куда заносятся id из каждой вышеназванной. Или я что-то не понял?
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #53 : 13-01-2010 13:46 » |
|
К сожалению в моих книгах кроме определения нормализации и их форм с примерами, не даны обоснования когда нужно нормализировать, а когда нет. Так прямо нигде и написано про аномалии удаления, добавления, изменения?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #54 : 13-01-2010 14:42 » |
|
Так прямо нигде и написано про аномалии удаления, добавления, изменения? У меня всего три книги:1. Бен Форта. Освой самостоятельно SQL. 10 минут на урок. 3-е издание В этой книге описаны только примеры операторов и некоторые различия языка SQL для разных СУБД. 2. Люк Веллинг, Лора Томсон. Разработка Web-приложений с помощью PHP и MySql. 2-е издание. В этой книге описаны только стандартные таблицы и использование индексов. 3. Люк Веллинг, Лора Томсон. MySql учебное пособие. В этой книге они есть. Сейчас буду читать и вникать.
|
|
|
Записан
|
|
|
|
|
|