Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 05.02.2014
Сообщений: 141

Реализация связи "многие ко многим" в БД

26.12.2016, 12:00. Показов 1820. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята вопрос у меня к Вам вот такой.
Есть у меня задание, в котором я навоял бд. суть - конструктор моделей автомобиля. каждая модель состоит из ряда параметров таких как двигатель кузов, кпп и тд. в том числе и из эм.. из краски ))) и вот в моей бд я предусматриваю, что автомобиль может иметь несколько цветов, для этого введена таблица color_set я так понимаю, что это есть связь многие ко многим ... дальше мое понимание того, что я делаю упущенно, помогите пожалуйста разобраться.
ни как могу понять как я буду реализовывать в рамках этой схемы наличие у автомобиля двух цветов одновременно, т.е. не возможность быть автомобилю белым или красным - а одновременно иметь и белый цвет и красный.
Всем спасибо.

прикладываю схему и скрипт.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
CREATE TABLE current_model (
    current_id serial PRIMARY KEY,
    model_name VARCHAR(256) NOT NULL UNIQUE
) WITH (
  OIDS=FALSE
);
 
CREATE TABLE kind_of_body (
    kind_of_body_id serial PRIMARY KEY,
    name_kind_of_body VARCHAR(256) NOT NULL UNIQUE
) WITH (
  OIDS=FALSE
);
 
CREATE TABLE engine (
    engine_id serial PRIMARY KEY,
    name_of_engine VARCHAR(256) NOT NULL UNIQUE,
    horsepower BIGINT
) WITH (
  OIDS=FALSE
);
 
 
CREATE TABLE color_table (
    color_id serial PRIMARY KEY,
    name_color VARCHAR(256) NOT NULL,
    isMetallic BOOLEAN NOT NULL,
    UNIQUE (name_color,isMetallic)
) WITH (
  OIDS=FALSE
);
 
CREATE TABLE transmission (
    transmission_id serial PRIMARY KEY,
    name_transmission VARCHAR(256) NOT NULL UNIQUE,
    number_of_speed BIGINT
) WITH (
  OIDS=FALSE
);
 
CREATE TABLE color_set (
    set_id serial NOT NULL,
    color_id BIGINT NOT NULL REFERENCES color_table (color_id),
    PRIMARY KEY(set_id,color_id)
) WITH (
  OIDS=FALSE
);
 
 
CREATE TABLE car_parametrs (
    model_id BIGINT REFERENCES current_model (current_id),
    engine_id BIGINT REFERENCES engine (engine_id),
    transmission_id BIGINT REFERENCES transmission (transmission_id) ,
    kind_of_body_id BIGINT REFERENCES kind_of_body (kind_of_body_id),
    set_id BIGINT,
    color_id BIGINT,
    FOREIGN KEY (set_id,color_id) REFERENCES color_set(set_id,color_id),
    PRIMARY KEY(model_id,engine_id,
    transmission_id,kind_of_body_id,set_id)
) WITH (
  OIDS=FALSE
);
Миниатюры
Реализация связи "многие ко многим" в БД  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2016, 12:00
Ответы с готовыми решениями:

Создание связи многие ко многим
Не могу понять, как правильно сделать. На данный момент только проектирую базу. Задание такое: Собственно, завтык на данной итерации в...

Связи многие ко многим по 2 таблицам и двойные условия
Добрый день. Есть бд приложил скрин схемы. Не понимаю ка сделать запрос что бы получить все проф. области используется навык...

Как автоматически создавать третью (связующую) таблицу при связи многие ко многим ?
Например, есть 3 таблицы Subject , Teacher, Teacher_Subject. Teacher_Subject - связующая таблица, с двумя внешними ключами, без...

7
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
26.12.2016, 13:30
А что мешает в таблице color_table ввести name_color='красно белый' (или 'бело красный')?
0
0 / 0 / 1
Регистрация: 05.02.2014
Сообщений: 141
26.12.2016, 13:49  [ТС]
ltv_1953, эм, потому что это не красно-белый и не бело красный ))) а отдельно два цвета у бибики - красный и белый, если честно... когда с преподом обсуждали зачем это - я сказал - брось! это будет интересно в реализации, ну он видимо подумал - делать человеку не чего - пусть мается ... а сейчас начал делать...эм, и ни как не пойму, целую неделю уже кручу верчу... и ни как не дойдет до меня...
п.с. ну тут я должен сделать преамбулу, что это моя первая бд и тд и тп )))

Добавлено через 5 минут
не знаю, понятно ли я объясняю, бывыет машина белая, бывает красная, а бывает такая что низ белый, а верх красный (ну к примеру) и вот такой color_set меня и интересует. т.е. он может быть отдельно белым, отдельно красная, а может быть белый;красный;
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
26.12.2016, 14:00
Цитата Сообщение от DimaAvatar Посмотреть сообщение
бывает такая что низ белый, а верх красный (ну к примеру)
В реале в каждой стране свои правила указания цвета для таких автомобилей. В РФ, например (насколько я помню), всегда в документах указывается один цвет - основной, которым для легковых должно быть покрашено не менее 70% кузова, а для грузовых - кабина. Остальное - произвольно, но не должно совпадать с раскраской специальных авто.
0
0 / 0 / 1
Регистрация: 05.02.2014
Сообщений: 141
26.12.2016, 14:48  [ТС]
ltv_1953, ммм )))) ок ))) у меня конструктор не для РФ )) а для какой то другой страны, где обязательно должны быть указанные все цвета которые были использованы в покраске автомобиля )

Добавлено через 36 минут
да, все пошутили и это хорошо ) а по вопросу будет ли варианты? Кто-нибудь? )
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
26.12.2016, 16:52
а в чем печаль-то? m:n кузов:краска
1
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
26.12.2016, 17:05
тогда нужна таблица для цветовых_наборов

SQL
1
2
3
4
5
6
CREATE TABLE SET (
    set_id serial NOT NULL
    PRIMARY KEY(set_id)
) WITH (
  OIDS=FALSE
);
и именно отсюда car_parametrs.set_id и не надо никаких car_parametrs.color_id, т.к. все цвета этого набора хранятся в другой таблице, обеспечивающей связь многие-ко-многим

SQL
1
2
3
4
5
6
7
CREATE TABLE color_set (
    set_id BIGINT NOT NULL REFERENCES SET (set_id),
    color_id BIGINT NOT NULL REFERENCES color_table (color_id),
    PRIMARY KEY(set_id,color_id)
) WITH (
  OIDS=FALSE
);
правда я бы её назвал наоборот set_color
1
0 / 0 / 1
Регистрация: 05.02.2014
Сообщений: 141
26.12.2016, 17:35  [ТС]
YuryK, спасибо, хм... ну так вроде бы и да! вроде как и подходит ))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2016, 17:35
Помогаю со студенческими работами здесь

Обозначьте связи между таблицами БД и тип связи (один-ко-многим, один-к-одному, многие-ко-многим).
обозначьте связи между таблицами БД и тип связи (один-ко-многим, один-к-одному, многие-ко-многим). Обозначьте типы данных центральной...

Связи Многие ко многим! В Interbase
Помогите мне нада создать 2е таблици со связью Многие ко многим! Есть таблица: BOOK в ней поля: id_book nazvanie id_avtor ...

Реализации связи многие ко многим
Есть простая физическая модель БД со связью многие ко многим по средством третьей таблицы C:\1.gif Реализована следующая связь (таблица...

Заполнение связи многие ко многим
Добрый день. Я только начинаю изучать базы данных и не могу понять, как правильно заполнять базу с таблицами со связью многие-ко-многим....

Ограничение целостности в связи многие ко многим
есть 3 таблицы: 1)Заказ (OrderId, и другие поля) 2)Продукты(ProductId,Price и другие поля) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru