|
|
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Возник такой вопрос: Есть связь многие ко многим, реализованная при помощи промежуточной таблицы. Первичный ключ в промежуточной таблице - это сочетание внешних ключей первых двух таблиц. Что изменится если удалить это ключ? Т.е. в промежуточной таблице столбцы останутся просто они не будут являться первичным ключом. Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 11:06 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Если вы не задали ограничения на связи между таблицами то у вас образуется плохая запись - указывающая не несуществующие записи таблиц. Ставьте ограничения ссылочной целостности чтобы не допустить появления такой ситации, либо периодически вылавливайте и обрабатывайте такие плохие записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 11:34 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Buga-bugaЧто изменится если удалить это ключ? Т.е. в промежуточной таблице столбцы останутся просто они не будут являться первичным ключом.Тогда будет возможность добавить в таблицу множественные связи (например выставить три раза один и тот же признак), и начнутся проблемы с удалением множественных атрибутов. Опишите ЗАЧЕМ вы это хотите сделать - тогда можно будет сказать будет плохо или не очень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 12:21 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительЕсли вы не задали ограничения на связи между таблицами то у вас образуется плохая запись - указывающая не несуществующие записи таблиц. 2 поля в связующей таблице - это Foreign Key - и здесь нам "ошибиться" не дадут - т.е. плохих записей не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 13:54 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
BelyОпишите ЗАЧЕМ вы это хотите сделать - тогда можно будет сказать будет плохо или не очень. Я изучаю SQL, и не могу ответить на этот вопрос, а ответ хотелось бы знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 13:59 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Я изучаю SQL, и не могу ответить на этот вопрос, а ответ хотелось бы знать. тогда лучше всего начать с чтения что есть первичный ключ и зачем он нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 14:02 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Buga-bugaЯ изучаю SQL, и не могу ответить на этот вопрос, а ответ хотелось бы знать.1. Что такое Многое ко Многим. Такую связь используют, например, при указании различных характеристик объекта Унас есть таблицы: Товар и Характеристики товаров. Есть товар: Пылесос. У него бывают характеристики: цвет, мощность, Тип используемых пакетов Есть товар: Упаковка скрепок. У него есть характеристики: Кол-во штук в упаковке, размер. Есть товар: Электрочайник. У него есть характеристики: Цвет, мощность, объем. Для хранения таких признаков и используются связи многое ко многим Таблица "Товар" ID NAME1 Пылесос2 Упаковка скрепок3 Электрочайник Таблица "Характеристики" ID PROP_NAME1 Цвет2 Мощность3 Тип пакетов для пылесоса4 Кол-во штукв упаковке5 Размер6 Объем Теперь указываем у какого товара какие характеристики есть. Таблица: "Характеристики_Товара" PRODUCT_ID PROP_ID1112132425313236 2. Теперь если мы удалим ограничение уникальности с таблицы "Характеристики_Товара", то у нас появится возможность указать два раза одну характеристику. Например: у пылесоса указать два раза цвет. PRODUCT_ID PROP_ID11111213 3. Теперь о проблемах - нам надо удалить одно свойство ЦВЕТ у пылесоса, а второе оставить. Мы этого сделать не сможем по нормальному Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 11:53 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
BelyТеперь о проблемах - нам надо удалить одно свойство ЦВЕТ у пылесоса, а второе оставить.Этой ситуации нельзя допустить, система должна позволять вводить только уникальные комбинаци. Что хорошего в том, что ту-же комбинацию можно вставить 20 раз? Нужно либо чтоб комбинация была первичным ключём таблицы-посредника, либо (если первичный ключ - нумератор, другое поле) иметь ограничение unique. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 01:39 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Ursego BelyТеперь о проблемах - нам надо удалить одно свойство ЦВЕТ у пылесоса, а второе оставить.Этой ситуации нельзя допустить, система должна позволять вводить только уникальные комбинаци. Что хорошего в том, что ту-же комбинацию можно вставить 20 раз?Хосподи.... Смотрите на мир ШИРЕЕ. Где-то такое нельзя допустить, а где-то только так и нужно. Например: У нас есть системный блок, есть комплектующие. Эти таблицы связаны друг с другом: Многие-ко-Многим Сколько может быть установлено процессоров в компьютере? Правильно - один или больше. Про жесткие диски и память - тем более. Уникальность здесь просто вредна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 10:23 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
BelyСколько может быть установлено процессоров в компьютере? Правильно - один или больше. Про жесткие диски и память - тем более. Уникальность здесь просто вредна. Вы меняете условия задачи. У Вас не простая связь многие-ко-многим, а атрибутированная, ПК соответственно - связь+связь+id_детали (ну или подобная). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 11:11 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
> Правильно - один или больше Не приходит в голову, что, например, нельзя установить два разных процессора? Или можно установить процессор + заглушку? > Про жесткие диски и память - тем более Про валидированные компоненты слышали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 11:21 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Buga-buga пишет: > ключей первых двух таблиц. Что изменится если удалить это ключ? Т.е. в > промежуточной таблице столбцы останутся просто они не будут являться > первичным ключом. Исчезнет требование уникальности значений в этих полях. И исчезнет индекс как средство обеспечения хорошей производительности. (но он возможно и не нужен). Если сделать аналогичный ключу уникальный индекс, то вообще ничего не изменится. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 12:00 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
softwarer BelyСколько может быть установлено процессоров в компьютере? Правильно - один или больше. Про жесткие диски и память - тем более. Уникальность здесь просто вредна. Вы меняете условия задачи. У Вас не простая связь многие-ко-многим, а атрибутированная, ПК соответственно - связь+связь+id_детали (ну или подобная).Конечно меняю, потому что я рассказыва НЕ про задачу, а про использование связи МНОГО ко МНОГИМ. У меня есть типовая конфигурация заказного компьютера. В него можно поставить (на выбор) 1,2 процессора, до 3-х HDD, 0-1 видеокарту, 0-2 звуковые карты. Это - определение конфигурации в рамках которой менеджер может вставить конкретные детали в заказ на сборку. Конкретной детали здесь нет. Есть тип детали (диск или CPU или видеокарта или что там еще). Вот такую конфигурацию я и собираюсь хранить в связи Много-ко-Многим. Изначально задача вообще была поставлена так: авторВозник такой вопрос: Есть связь многие ко многим, реализованная при помощи промежуточной таблицы.Про предметную область - ни слова. Да, в большинстве случаев много-ко-многим - уникальность будет нужна. Но НЕ ВСЕГДА . В каждом случае - решается отдельно. Я про это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 12:39 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Правильно - один или больше Не приходит в голову, что, например, нельзя установить два разных процессора? Или можно установить процессор + заглушку?Это правила другого уровня. guest_20040621> Про жесткие диски и память - тем более Про валидированные компоненты слышали?Не знаю что именно вы имеете ввиду. Скорее всего догадываюсь, но наверняка не скажу. И какое это имеет отношение к данной теме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 12:43 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
> Это правила другого уровня. Какого "другого уровня"? > И какое это имеет отношение к данной теме? Если приводите примеры, попробуйте делать это без ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 12:47 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
guest_20040621> И какое это имеет отношение к данной теме? Если приводите примеры, попробуйте делать это без ошибок.Ну так распишите в чем ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 12:48 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
Bely Ursego BelyТеперь о проблемах - нам надо удалить одно свойство ЦВЕТ у пылесоса, а второе оставить.Этой ситуации нельзя допустить, система должна позволять вводить только уникальные комбинаци. Что хорошего в том, что ту-же комбинацию можно вставить 20 раз?Хосподи.... Смотрите на мир ШИРЕЕ. Где-то такое нельзя допустить, а где-то только так и нужно. Например: У нас есть системный блок, есть комплектующие. Эти таблицы связаны друг с другом: Многие-ко-Многим Сколько может быть установлено процессоров в компьютере? Правильно - один или больше. Про жесткие диски и память - тем более. Уникальность здесь просто вредна.Естественно, что одна и та же деталь может быть установлена более, чем один раз (болты - даже более наглядный пример, чем процессоры). Для этого в таблицу-посредник просто добавляется поле "количество". По Вашей версии выходит, что если в компе 20 одинаковых болтов, то добавляется 20 записей - это даже смешней, чем "if true then". Итак, попрошу другой пример когда "только так и нужно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 19:06 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
UrsegoЕстественно, что одна и та же деталь может быть установлена более, чем один раз (болты - даже более наглядный пример, чем процессоры). Для этого в таблицу-посредник просто добавляется поле "количество". По Вашей версии выходит, что если в компе 20 одинаковых болтов, то добавляется 20 записей - это даже смешней, чем "if true then". Итак, попрошу другой пример когда "только так и нужно".1. Хранить кол-во элементов или хранить все варианты множественного выбора - варианты примерно равноценные. Иногда удобнее так, иногда по другому. Из одного представления можно получить другое и наоборот, хотя иногда с извращениями. 2. Вы к связи Многое-ко-Многим добавили поле и ушли от классического понимания этой связи. softwarerУ Вас не простая связь многие-ко-многим, а атрибутированная, 3. Вы добавили новое поле, тогда добавлю и я поле - называться будет RANK. Будет определять порядок элементов в списке. Мы будем делать шаблон вывода на печать на кассовую ленту. Есть таблица элементов, есть таблица шаблонов. шаблон может выглядеть так: Пропуск Пропуск Печать ИНН Пропуск Список Товаров Прочерк Сумма товара Получено Денег Пропуск Фискальные данные Здесь вы уже не сможете обойтись уникальностью пар и количеством. Но все это постепенно уже удаляется от изначального вопроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2007, 19:54 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
BelyВы к связи Многое-ко-Многим добавили поле и ушли от классического понимания этой связи.Я не к связи добавил (она как была так и осталась посредством тех-же полей), а к таблице. Вполне естественно, что таблица, сущность которой - связь других таблиц many-to-many, может содержать и другие поля (причём нередко их больше, и намного, чем полей, непосредственно причастных к связи). Вот таблица, описывающая строку invoice-а (извиняюсь, не знаю как по-русски), это таблица связи между таблицей инвойсов (точнее, их заголовков, где дата, поинтер на покупателя и прочие поля) и таблицей продуктов. Так что, по-Вашему выходит, что если эта таблица содержит дополнительные поля кроме invoice_num и product_num (например, "цена единицы продукта в момент сделки" и "количество"), то это "уход от классического понимания этой связи"? Что-же это тогда, если не many-to-many? Кстати, пример того, когда в связывающей таблице НЕОБХОДИМО разрешить дублирование комбинаций внешних ключей, так и не был преведен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 21:46 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
UrsegoКстати, пример того, когда в связывающей таблице НЕОБХОДИМО разрешить дублирование комбинаций внешних ключей, так и не был преведен. Ну это тривиально. Допустим, слева - клиенты, справа - банки, развязка - банковские счета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2007, 22:35 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
UrsegoТак что, по-Вашему выходит, что если эта таблица содержит дополнительные поля кроме invoice_num и product_num (например, "цена единицы продукта в момент сделки" и "количество"), то это "уход от классического понимания этой связи"? Что-же это тогда, если не many-to-many?Если добавлять атрибуты к связи, то это получится уже не связь, а новая сущность. Иначе к связи многое ко многому можно причислить что угодно ссылающееся на две таблицы. Например, есть таблица ORG у которой два поля являются FK на таблицы ORG_TYPE и ORG_ADDRES. По вашему это связь много ко многим, чтоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 10:35 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
BelyЕсли добавлять атрибуты к связи, то это получится уже не связь, а новая сущность. Между этими понятиями нет принципиальной разницы. Вопрос терминологии, конечно, но исторически, еще до RDBMS, сложились понятия "запись" и "связь, в том числе атрибутированная связь". Скажем, если рассматривать мою связь с ВУЗом, в ней будут атрибуты дата поступления, дата окончания, номер диплома итп. Если связи нет - если у меня нет высшего образования - нет и этих атрибутов. При введении RDBMS понятие связи как физического объекта убили, точнее, втянули в понятие записи. Например, вышеописанная ситуация решается включением атрибутов в мою запись плюс check constraint-ами, которые не позволят заполнить атрибуты без указания id ВУЗа. Поскольку логически такое понятие осталось - периодически и проявляются коллизии. BelyИначе к связи многое ко многому можно причислить что угодно ссылающееся на две таблицы. Например, есть таблица ORG у которой два поля являются FK на таблицы ORG_TYPE и ORG_ADDRES. По вашему это связь много ко многим, чтоли? Нет. Но стоит понимать, что это определяется неформально, исключительно той ролью, которую разработчик отводит таблице в своих рассуждениях, никак не фиксируя ее в схеме данных. Чтобы показать это - пример, обратный Вашему. Возьмите любую пару таблиц, как Вы считаете, связанных многие-ко-многим, и добавьте в таблицу связи поля date_from, date_to. По-вашему, таблица теперь перестала быть связью многие-ко-многим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 12:03 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
softwarerЧтобы показать это - пример, обратный Вашему. Возьмите любую пару таблиц, как Вы считаете, связанных многие-ко-многим, и добавьте в таблицу связи поля date_from, date_to. По-вашему, таблица теперь перестала быть связью многие-ко-многим?Здесь, пожалуй, соглашусь. Эта связь всеравно останется Много-ко-Многим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 16:44 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
В реляционной БД нет связей, есть таблицы и ограничения ссылочной целостности. В процессе реижиниринга схемы БД в ER модель в зависимости от наших целей, мы можем обозвать одни таблицы связями, другие сущностями. Например, связь двух сущностей может быть реализована целой цепочкой таблиц, но если эти промежуточные таблицы в данный момент нас не интересуют, в ER модели мы можем изобразить только связь этих сущностей, опустив детали реализации. Фактически связи отношений (таблиц и представлений) реляционной БД возникают только в процессе выполнения SQL запроса. Как напишем условия соединения таблиц в запросе, такая связь и получиться. Она может быть отражена в ER модели, но может и отсутствовать. Более того, она может быть совершенно бессмысленной, с точки зрения бизнес логики, как например соединение поставщика и товара по № телефона и артикулу изделия. Иногда связь может иметь атрибуты, которых нет в БД, например, нужно получить исторические сведения о сотруднике и его зарплате на определённую дату в прошлом. Без этой даты связь будет 1:*, с датой, 1:1. Очень хорошо связи (ассоциации) развиты в UML. Что касается множественности связи, то иметь таблицу без PK не хорошо. Но и вводить суррогатный ключь, или счётчик кратности связи тоже не всегда удобно. Если использовать счётчик кратных связей, то он может стать узким местом, когда одновременно многие процессы создают связи некоторых объектов. Без счётчика может возникнуть ситуация, когда два пользователя пытаются уменьшить число связей на 1, например из 10 связей получить 9, но каждый удаляет по одной связи и в итоге получается не 9 а 8 связей. Здесь, для принятия решения нужно проанализировать предметную область. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 19:54 |
|
||
|
Связь многие ко многим
|
|||
|---|---|---|---|
|
#18+
mcureenabВ реляционной БД нет связей, есть таблицы и ограничения ссылочной целостности. В процессе реижиниринга схемы БД в ER модель в зависимости от наших целей, мы можем обозвать одни таблицы связями, другие сущностями. Например, связь двух сущностей может быть реализована целой цепочкой таблиц, но если эти промежуточные таблицы в данный момент нас не интересуют, в ER модели мы можем изобразить только связь этих сущностей, опустив детали реализации. Фактически связи отношений (таблиц и представлений) реляционной БД возникают только в процессе выполнения SQL запроса. Как напишем условия соединения таблиц в запросе, такая связь и получиться. Она может быть отражена в ER модели, но может и отсутствовать. Более того, она может быть совершенно бессмысленной, с точки зрения бизнес логики, как например соединение поставщика и товара по № телефона и артикулу изделия. Иногда связь может иметь атрибуты, которых нет в БД, например, нужно получить исторические сведения о сотруднике и его зарплате на определённую дату в прошлом. Без этой даты связь будет 1:*, с датой, 1:1. Во-первых, обязательно нужно делать ссыдку, что речь идет о реляционной модели. Во-вторых, не нужно путать физическую и логическую модель данных. Физическая модель может отличаться от одной СУБД к другой на одной логической моделе БД. С уважением, bw. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 21:26 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34607732&tid=1540721]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 277ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...