Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для RedMirage
21 / 21 / 1
Регистрация: 28.12.2009
Сообщений: 195

Правильный проект БД. Как поступить?

24.01.2010, 21:08. Показов 1901. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые знатоки! Бд хранит информацию о керамической плитке. Одна коллекция плиток может быть задействована в нескольких дизайнах помещений. Один дизайн помещения может содержать несколько коллекций в себе. В одной таблице с первичным ключом id_plitka хранится название коллекции (плитки с разным id могут быть в одной коллекции), также хранится в одной ячейке название проектов, в которых участвует плитка, в другой ячейке хранится адрес с картинкой плитки. Так вот, как сделать запрос, чтобы он выдавал проекты в которых участвует коллекция, плитка? Допостуим ищем проекты в которых участвует коллекция. Сортируем таблицу по коллекции. Будет несколько строк. В ячейке где храниться название проектов может хранится несколь имен проектов, причем в разных ячейках они могут повторяться. Как сделать выборку, чтобы имена проектов в которых участвует выбранная коллекция не повторялись? Как выбрать проект и показать плитку в котором он участвует? Я пока планирую создать две таблицы. В одной таблице параметры плитки и участиев проектах, в другой таблице имея проекта (первичный ключ), название плиток и коллекций, которые в нем задействованы. Сколько мне таблиц лучше создать? Как связать? Как правильно выбрать ключи? Наименований плитки будет около 11 000, проектов меньше. Ваши предложения. Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2010, 21:08
Ответы с готовыми решениями:

Правильный ли у меня проект сети?
Задание : Создать проект сети (сеть расположена в двух зданиях,расстояние 300метров, в каждом здании 2 комнаты по 6 компьютеров,в...

как поступить
здравствуйте товарищи програмисты! помогите пожалуйста! купил ноут! принес его домой, включаю, а там всё на английском и окошек всплыло до...

как поступить
Приветствую вас, у меня такой вопрос. как поступить. есть ноутбук MSI MEGA-BOOK hjwtccjh Intel celeron inside, оперативная память 1GB,...

6
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
25.01.2010, 15:00
Три таблицы:
1. Коллекции
2. Проекты
3. Связная проекты-коллекции

Грубо описывая:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE collections (
   id INT PRIMARY KEY,
   name VARCHAR(255),
   image VARCHAR(255)
);
CREATE TABLE projects (
   id INT PRIMARY KEY,
   name VARCHAR(255)
);
CREATE TABLE projects_n_collections (
   collection INT,
   project INT
);
Выборка коллекций, использованных в проекте с id=[project_id]:
SQL
1
2
3
SELECT c.id, c.name FROM collections c
LEFT JOIN projects_n_collections j ON j.collection = c.id
WHERE j.project = [project_id];
Выборка проектов, где использована коллекция с id=[coll_id]:
SQL
1
2
3
SELECT p.id, p.name FROM projects p
LEFT JOIN projects_n_collections ON j.project = p.id
WHERE j.collection = [coll_id];
Правильность синтаксиса не гарантируется - писалось навскидку.
2
 Аватар для RedMirage
21 / 21 / 1
Регистрация: 28.12.2009
Сообщений: 195
26.01.2010, 13:28  [ТС]
Спасибо. Понял. Только так. В одной коллекции может быть несколько плиток. В одном проекте может участвовать несколько коллекции и соответственно плиток. Решил сделать немножко по другому. Таблица где хранятся параметры плитки, в том числе столбец с указанием к какой коллекции принадлежит плитка и столбец с указанием проектов в которых плитка участвует. И вторая таблица с название и id проекта, с указанием какая плитка в нем участвует. В одной ячейке мжет хранится несколько значений. И третья таблица для связи проект-плитка. Там id плитки и проектов. Для поиска по коллекции достаточно будет использовать первую таблицу. Если моя идея неправильна, то подправьте меня, пожалуйста. А с синтаксисом проблем нет. Мне главное сейчас как правильно организовать БД. Просто я новичок. Ещё раз спасибо за помощь.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
26.01.2010, 13:45
Цитата Сообщение от RedMirage Посмотреть сообщение
Таблица где хранятся параметры плитки, в том числе столбец с указанием к какой коллекции принадлежит плитка и столбец с указанием проектов в которых плитка участвует.
Столбец с указанем проектов совершенно не нужен, так как связь с проектами легко устанавливается через коллекцию, к которой эта плитка принадлежит.

Цитата Сообщение от RedMirage Посмотреть сообщение
И вторая таблица с название и id проекта, с указанием какая плитка в нем участвует.
В смысле, связная таблица проект-плитка? Если да, то это тоже не нужно.

Цитата Сообщение от RedMirage Посмотреть сообщение
В одной ячейке мжет хранится несколько значений.
Может. Но не нужно к этому стремиться. Особенно на этапе проектирования.

Итого:
Если нужно добавить еще данные о конкретной плитке, сделайте для них всего одну отдельную таблицу с полями (id, collection, parameter1, parameter2, ...). Поле collection должно содержать id коллекции, в которую входит плитка.

При проектировании особенно важно: четко сформулировать, какие выборки вам понадобятся. Например:
1. Количество видов плитки, используемое в конкретном проекте
2. Список коллекций, используемых в проекте
3. Список проектов, где задействована конкретная плитка
...
1
 Аватар для RedMirage
21 / 21 / 1
Регистрация: 28.12.2009
Сообщений: 195
26.01.2010, 14:01  [ТС]
Цитата Сообщение от ostgals Посмотреть сообщение
Столбец с указанем проектов совершенно не нужен, так как связь с проектами легко устанавливается через коллекцию, к которой эта плитка принадлежит.
Ага. То есть будет обращение к таблице коллекции?


Цитата Сообщение от ostgals Посмотреть сообщение
В смысле, связная таблица проект-плитка? Если да, то это тоже не нужно.
Это не связная таблица. В это й таблице хранится информация о проекте (тип проекта, адрес картинка, коллекция участвующая в проекте). Тогда и в этой таблице не нужно указывать какая плитка участвует. Связь будет через таблицу коллекция?


Цитата Сообщение от ostgals Посмотреть сообщение
Может. Но не нужно к этому стремиться. Особенно на этапе проектирования.
Избежать не получится. Так как в одной колекции может быть несколько плиток. В одном прооекте участвовать несколько коллекции или отдельных плиток. Понимаю это не очень хорошо. Но как это избежать?
Цитата Сообщение от ostgals Посмотреть сообщение
Итого:
Если нужно добавить еще данные о конкретной плитке, сделайте для них всего одну отдельную таблицу с полями (id, collection, parameter1, parameter2, ...). Поле collection должно содержать id коллекции, в которую входит плитка.
Да. Это таблица просто необходима. Будет же каталог по плитке. Но нормально, что id коллекции могут повторяться?
Цитата Сообщение от ostgals Посмотреть сообщение
При проектировании особенно важно: четко сформулировать, какие выборки вам понадобятся. Например:
1. Количество видов плитки, используемое в конкретном проекте
2. Список коллекций, используемых в проекте
3. Список проектов, где задействована конкретная плитка
...
Еще такие выборки как цвет плитки например, плитки участвующие в проекте. Коллекции участвующи в проетк, проекты по типу, например проекты для кухни. Очень много выборок... Спасибо за помощь. Но похоже, чем дальше, тем больше у меня вопросов...
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
26.01.2010, 14:30
Цитата Сообщение от RedMirage Посмотреть сообщение
Ага. То есть будет обращение к таблице коллекции?
Не обязательно. Смотря какие данные вам понадобятся.
Выборка проектов, где использована плитка plitka_id:

SQL
1
2
3
SELECT pr.id, pr.name FROM projects pr
LEFT JOIN (projects_n_collections j, plitka pl) ON (j.collection = pl.collection AND j.project = pr.id)
WHERE pl.id = [plitka_id];
Как видите, таблица collections не используется, так данные из нее нам не нужны.

Цитата Сообщение от RedMirage Посмотреть сообщение
Это не связная таблица. В это й таблице хранится информация о проекте (тип проекта, адрес картинка, коллекция участвующая в проекте). Тогда и в этой таблице не нужно указывать какая плитка участвует. Связь будет через таблицу коллекция?
Необходимость поля "коллекция участвующая в проекте" сомнительна, ведь в проекте могут быть задействованы несколько коллекций...

Цитата Сообщение от RedMirage Посмотреть сообщение
Избежать не получится. Так как в одной колекции может быть несколько плиток.
Никаких проблем. В таблице plitka значения поля collection не обязаны быть уникальными

Цитата Сообщение от RedMirage Посмотреть сообщение
В одном прооекте участвовать несколько коллекции или отдельных плиток.
Здесь кроется подвох, который может привести к полному перепроектированию БД. Если проект может использовать не коллекцию полностью, а лишь отдельные плитки, то связная таблица проекты-коллекции теряет актуальность и более правильно будет создать связную таблицу проекты-плитки.

Цитата Сообщение от RedMirage Посмотреть сообщение
Но нормально, что id коллекции могут повторяться?
Вполне нормально. Именно так реализуется в БД отношение (relation) один-в-множество.

Цитата Сообщение от RedMirage Посмотреть сообщение
Спасибо за помощь. Но похоже, чем дальше, тем больше у меня вопросов...
Пожалуйста.
Да уж, вопросов будет все больше и больше. Я бы посоветовал почитать что-то по базам данных. Именно теорию, а не руководство по MySQL. На моей памяти неплохая теория была и в справочной системе по Access. По крайней мере, основные понятия и отношения в БД были расписаны очень понятно.
2
 Аватар для RedMirage
21 / 21 / 1
Регистрация: 28.12.2009
Сообщений: 195
17.02.2010, 17:40  [ТС]
Три таблицы: 1. Таблица с характеристиками плитки. 2. Таблица с характеристиками проектов. 3. Таблица с id плитки и id проектов. Проблема решена. Всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2010, 17:40
Помогаю со студенческими работами здесь

Как поступить?
Привет, всем. Хотел спросить кое-что у вас. Вот такая сетуация: Пишу сайт(свой) на HTML. Сервис Ucoz. Ситуация выборная: Писать...

Как поступить?
Добрый вечер. Такая ситуация: Есть большая таблица в БД, на данный момент ~10кк строк (7 столбцов) и она пополняется почти каждую...

как поступить?
кто-то сталкивался с проблемой с доменами когда домен регался не на настоящие данные. что можно сделать с доменом что бы не было...

Как поступить?
вопрос об общей разработке и об PHP в том числе, хотел бы посоветоваться с Вами как быть, устроился на работу программистом, начальник...

Как поступить?
Здравствуйте, хочу купить ссылку с морды, морда жирная, исходящих мало, страницы индексируются, но в индексе нет главной и при поиске...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru