zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« : 11-01-2010 16:14 » |
|
У меня есть таблица: ------------------------------------------- |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.
|
|
« Последнее редактирование: 11-01-2010 17:23 от zuze »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 11-01-2010 16:39 » |
|
а он не должен повторяться, по идее Если есть возможность - лучше создать ещё колонку с уникальным индексом в таблице 1 id должен называться autor_id и быть уникальным
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #2 : 11-01-2010 16:53 » |
|
zuze, убедительнейшая просьба: выкладывать не картинки с "радикала", а нормальный текст!
id - это что? Имена у таблиц есть или это полная абстракция?
|
|
« Последнее редактирование: 11-01-2010 16:57 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #3 : 11-01-2010 17:00 » |
|
Алексей1153++, сейчас я поясню более подробно, что я имею ввиду. Представьте, что есть исходная таблица, которую нужно нормализовать:
------------------------------------------- |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 | | |...|.... |.... |.... | |n |.... |.... |.... | -------------------------------------------
Как видно из этой таблицы у авторов petrov и vilkin совпадает cod1, а следовательно будет совпадать author_id. Как видно из этой таблицы у авторов sushkin и vilkin совпадает cod2, а следовательно будет совпадать author_id.
И что же в таком случае делать?
|
|
« Последнее редактирование: 11-01-2010 17:29 от zuze »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #4 : 11-01-2010 17:08 » |
|
zuze, не совсем понятно: ты хочешь вынести коды в отдельную таблицу со своими идентификаторами? А есть ли смысл? Не все и вся нужно нормализовывать. Рассмотри, что у тебя первично в отношениях объектов (повторяю вопрос: что такое id - чей id?).
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #5 : 11-01-2010 17:36 » |
|
что такое id - чей id В Таблице1 id - это уникальный идентификатор автора. В Таблице2 id - это уникальный идентификатор строки, а author_id - это идентификатор кода (cod1) конкретного автора В Таблице3 id - это уникальный идентификатор строки, а author_id - это идентификатор кода (cod2) конкретного автора Может я вообще всё не так делаю и надо было всё, как-то иначе делать?Не все и вся нужно нормализовывать. Как можно выяснить нужно или не нужно нормализировать?
|
|
« Последнее редактирование: 11-01-2010 17:42 от zuze »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #6 : 11-01-2010 17:58 » |
|
zuze, Это ты решаеш сам. Есть примерная область применения твоей базы. И запросы, которые будут применяться к твоей базе. Ты должен определить. Какое построение данных будет наименее затратным. Также стоит обратить внимание на дальнейшее безболезненное увеличение. Так чтоб, на "я хочу" твоего начальника, тебе не пришлось полностью перелапачивать код.
|
|
« Последнее редактирование: 11-01-2010 18:01 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
|
|
« Ответ #7 : 11-01-2010 19:45 » |
|
zuze, вариантов несколько: 1. Оставить исходный вид. 2. Вынести коды в отдельную таблицу. CREATE TABLE authors ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL );
CREATE TABLE authors_codes ( author_id INT NOT NULL, code VARCHAR(10) NOT NULL, PRIMARY KEY (author_id, code) );
3. Вынести коды в отдельный справочник и создать таблицу связи с авторами. CREATE TABLE authors ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL );
CREATE TABLE codes ( id INT PRIMARY KEY, code VARCHAR(10) NOT NULL );
CREATE TABLE authors_codes ( author_id INT NOT NULL, code_id INT NOT NULL, PRIMARY KEY (author_id, code_id) );
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #8 : 11-01-2010 20:02 » |
|
Если cod1, cod2 обобщить до N, то появится ещё одна таблица.
Author(AuthorID,Name), где Name='petrov','ivanov',... CodeType(CodeTypeID,Type), где Type=1,2,... Code(CodeID,CodeTypeID,Value), где Value=88.1,771.09,... Table(AuthorID,CodeID)
Но если в исходной таблице ID имеет какой-то смысл (например, важно, чтобы все перечисленные в cod1, cod2 полях коды логически относились к одной записи), то в Table добавится и это поле.
Возможно, CodeTypeID относится не к справочнику Code, а к основной таблице Table - это зависит от совпадения или несовпадения доменов у cod1, cod2 и т.д.
|
|
« Последнее редактирование: 11-01-2010 20:03 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
McZim
|
|
« Ответ #9 : 11-01-2010 21:39 » |
|
Как уже сказали вариантов масса. Единственно что нужно понять, то как будут наполняться таблицы/таблица, то есть какой будет объем данных и как потом с этими таблицами намерен работать? Какие нужны данные по каким условиям?
Кардинальных вариантов два. Оставить все в одной таблице (не так как сейчас) с одним уникальным полем id, или разнести на три таблицы, все остальное это вариации этих методов.
Задача не ясна.
RXL, второй вариант у тебя не верен, не понятно где какой код, я так понял что автору нужно четкое разграничение. Или я ошибаюсь?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #10 : 11-01-2010 21:51 » |
|
например,
|id | author_id | flag|value| ---------------------------------- |1 |1 |cod1|88.1 | |2 |1 |cod2|771.09| |3 |1 |cod2|77.09| если id не уникально. если требуется уникальность записи то еще одно поле id записи = id самой первой таблицы
1|1 |88.1|cod1|petrov | 2|1 |81.2|cod1|petrov | 3|1 |771.09|cod2|petrov | 4|1 |77.1|cod2|petrov |
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #11 : 11-01-2010 22:04 » |
|
Sla, если ограничиваться одной таблицей, то id это и будет идентификатор уникально записи
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #12 : 11-01-2010 22:10 » |
|
в этом варианте есть определенное преимущество 1|1 |88.1|cod1|petrov | 2|1 |81.2|cod1|petrov | 3|1 |771.09|cod2|petrov | 4|1 |77.1|cod2|petrov |
его можно "улучшить"
CREATE TABLE authors ( id INT PRIMARY KEY, name VARCHAR(100) NOT NULL );
CREATE TABLE codes ( id INT PRIMARY KEY, code VARCHAR(10) NOT NULL );
CREATE TABLE values ( id INT PRIMARY KEY, id_record int, id_code int, id_authors int, value VARCHAR(10) );
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #13 : 11-01-2010 22:27 » |
|
имхо, лишнее это.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #14 : 11-01-2010 22:48 » |
|
объем данных Десятки тысяч, а может и сотни строк. как потом с этими таблицами намерен работать и какие нужны данные по каким условиям? С ними будет работать скрипт таким образом, если пользователь выбирает конкретную фамилию, то выводится она и все коды относящиеся к этой фамилии.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #15 : 12-01-2010 08:19 » |
|
zuze, а как данные заносятся? Поля могут быть пустыми, если да то какие? Набор фамилий или кодов фиксированный?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #16 : 12-01-2010 08:27 » |
|
Поля могут быть пустыми, если да то какие? Поля cod1 или cod2 могут быть пустыми, но это редкий случай.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #17 : 12-01-2010 09:14 » |
|
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #18 : 12-01-2010 09:38 » |
|
McZim, к сожалению такой вариант не подходит, так как повторяется фамилия несколько раз, это было ничего страшного если бы был только столбец фамилия.
Дело в том, что я специально для примера упростил таблицу, а в реальной таблице ещё куча столбцов и если они все будут повторятся, таблица будет накапливать очень большой объём дублирующей информации.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #19 : 12-01-2010 09:45 » |
|
Не, я так не играю Тут что главное? Думаю что вот это 1 |88.1,81.2|771.09,77.1|petrov |.... т.е. id записи и другие
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #20 : 12-01-2010 09:54 » |
|
zuze, я же говорю все зависит от того что нужно в итоге, я не знаю твоей задачи и твоих требований. Если не устраивает так, то разноси, как будешь разносить это тоже дело твое, так как id авторов могут тоже повторяться в таблицу.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #21 : 12-01-2010 09:58 » |
|
Sla, в основной таблице есть столбцы id cod1, cod2, author и куча ещё других столбцов которые относятся к конкретному автору, вот по этому я и не стал их указывать.
Если нужно для полноты картины написать полную таблицу, я с удовольствием это сделаю.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #22 : 12-01-2010 10:00 » |
|
zuze, ты лучше расскажи что ты хочешь сделать в итоге? Какая цель? И почему у тебя в таблице не могут повторяться авторы?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #23 : 12-01-2010 10:07 » |
|
что ты хочешь сделать в итоге? Какая цель? Разработка информационно-поисковой системы почему у тебя в таблице не могут повторяться авторы? Так как все другие поля столбцов которые я не указал для простоты тоже зависят от автора и их тоже придётся дублировать, а там приличный объём информации.
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #24 : 12-01-2010 10:16 » |
|
У тебя так и так будет объем информации одинаков. Например ты разнесешь данные по таблицам, в одной из таблиц у тебя будет имя автора и его id в другой таблице куча записей для этого id. Если для одного автора сопоставима куча информации в разный момент времени, что ты хочешь куда разделить что бы не было дубля. Да и вообще я не вижу дубля, каждая запись уникальна. Если у тебя все же укладываются в БД одинаковые записи, то это уже вопрос не к БД.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #25 : 12-01-2010 10:31 » |
|
например CREATE TABLE books ( id INT PRIMARY KEY, author VARCHAR(100) NOT NULL, name VARCHAR(100) NOT NULL ); CREATE TABLE parameters ( id INT PRIMARY KEY, id_books int, name_parameter VARCHAR(100) NOT NULL, value_parametr VARCHAR(100) )
вижу такое
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #26 : 12-01-2010 10:46 » |
|
У меня появилась такая идея, Таблица2 и Таблица3 остаётся без изменений, а Таблица1 имеет вид:
------------------------------- |id | cod1 | cod2 | author | ------------------------------- |1 |1 |1 |petrov | |2 |2 |2 |ivanov | |3 |3 |3 |sushkin| |4 |1 |3 |vilkin | |...|.... |.... |.... | |n |x |y |z | -------------------------------
Как Вы считаете это хорошая идея?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #27 : 12-01-2010 11:11 » |
|
не понятно
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 12-01-2010 11:19 » |
|
Таблица2: --------------------------- |id_cod1 | cod1 | author_id | --------------------------- |1 |88.1 |1 | |2 |81.2 |1 | |3 |88.1 |2 | |4 |83.2 |2 | ---------------------------
Таблица3: --------------------------- |id_cod2 | cod2 | author_id | --------------------------- |1 |771.09|1 | |2 |77.1 |1 | |3 |771.09|2 | ---------------------------
Таблица1:
-------------- |id_author | author | -------------- |1 |petrov | |2 |ivanov | --------------
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #29 : 12-01-2010 11:21 » |
|
Sla, сейчас попробую пояснить более подробно.
Есть исходная таблица:
------------------------------------------- |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 | -------------------------------------------
Таблица2:
--------------------------- |id | cod1 | author_id | --------------------------- |1 |88.1 |1 | |2 |81.2 |1 | |3 |88.1 |2 | |4 |83.2 |2 | |5 |89 |3 | ---------------------------
Таблица3:
--------------------------- |id | cod2 | author_id | --------------------------- |1 |771.09|1 | |2 |77.1 |1 | |3 |771.09|2 | |4 |200.01|3 | ---------------------------
Таблица1:
------------------------------- |id | cod1 | cod2 | author | ------------------------------- |1 |1 |1 |petrov | |2 |2 |2 |ivanov | |3 |3 |3 |sushkin| |4 |1 |3 |vilkin | -------------------------------
Надеюсь так стала понятно. Как Вы считаете это хорошая идея?
|
|
|
Записан
|
|
|
|
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 учебное пособие. В этой книге они есть. Сейчас буду читать и вникать.
|
|
|
Записан
|
|
|
|
|
|