powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с проектированием структуры БД
19 сообщений из 19, страница 1 из 1
Помогите с проектированием структуры БД
    #36839074
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано: два вида оборудования (будет больше) - свичи и хосты. В базе должны храниться некоторые параметры и характеристики оборудования. Общие поля - "<id>", "name", "IP". Проблема в том, что в одну таблицу это не запихнуть ибо есть разные поля.
Пока придумал сделать общую таблицу - devices - и две таблицы - switches и hosts. У свичей может быть связь switches.host_id -> hosts.id. Так же может быть связь между свичами.
Думал ещё сделать [devices] (id, name, ip) - [devices_rel] (prop_id, device_id) - [properties] (id, key, value), но думается, что это довольно трудоёмко по ресурсам будет ибо в properties будут все свойства (а устройств может быть много) и, например, выборки по полю properties.key будут долгие и не очень удобные для нашего C-программиста.
В общем, я запутался -_- Надо завтра уже предоставить хотя бы черновой вариант структуры :(
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839361
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLom,
Мне первый вариант больше нравится. С тремя таблицами-то. Правда если новый тип устройства будет, то нужно будет создавать новую таблицу.
Нехватает таблички - типы устройств. Особенно для второго варианта со свойствами оно необходимо. А то как определить тип устройства то?
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839605
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SV,

Для второго - возможно, но для первого особого смысла не вижу, ведь при выборке будет известно, какой тип устройства нужен, и добавить в SQL-запрос "FROM device_$device_type" - не проблема.

Последний вариант пока такой:
devices.png
Со связями я не особо знаком, так что нарисовал, можно сказать, наугад :)

Как тут с ключами поступить? Понятно, что <id> - PRIMARY KEY. Ещё нужны какие-нибудь?
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839687
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное, FOREIGN KEY's:
devices_switch.id - devices.dev_id
devices_host.id - devices.dev_id
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839698
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLom,

Может я чего-то не допонял, но я вижу это так:
devices = {id, name, ip}
devices_switch = {id, device_id, model, ports_count}
devices_host = {id, device_id, if_count}


devices_host(device_id) ------> (id) devices (id)<-------(device_id) devices_switch
Где - id во всех таблицах PRIMARY_KEYS.
Таблицы host и switch соединяются с главной devices по device_id (FOREIGN KEY).
Swich:
select b.id, a.name, a.ip, b.model, b.ports_count from devices a inner join devices_switch b on a.id = b.device_id

Host:
select b.id, a.name, a.ip, b.if_count from devices a inner join devices_host b on a.id = b.device_id

Если вы знаете немного ООП, то можно это объяснить так:
Абстрактный класс DEVICE - от него наследуются два класса HOST и SWITCH.

PS. Есть мнение, что лучше называть таблицы в единственном числе: device, device_switch, device_host.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839722
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLomи, например, выборки по полю properties.key будут долгие и не очень удобные для нашего C-программиста.
Почему? Индекс по id будет, отчего же им тогда долгими быть? А программист один раз напишет функцию, запрашивающую все свойства устройства id и возвращающую их в виде "словаря" (key, value) и всё. А иначе придется плодить отдельные запросы и таблицы для каждого типа устройств. Разве это удобнее программисту?
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839801
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon
Почему? Индекс по id будет, отчего же им тогда долгими быть? А программист один раз напишет функцию, запрашивающую все свойства устройства id и возвращающую их в виде "словаря" (key, value) и всё. А иначе придется плодить отдельные запросы и таблицы для каждого типа устройств. Разве это удобнее программисту?
Первый вариант предпологает, что типы устройств будут за ранее определены на стадии проектирования. Просто я предположил, что их небольшое количество будет.
Если так получится, что два типа устройста будут с одинаковым набором атрибутов, то лучше все-таки ввести табличку типы устройств.
Если БД позволяет - можно лучше создать VIEW. Например vwDevicesHost и vwDevicesSwitch.
В случае второго варианта - есть проблема такого плана: как узнать какой набор аттрибутов можно ввести для данного устройства? Ведь этого в приведенной модели невозможно определить.
Да еще некоторые аттрибуты нужно вводить обязательно... Там, как говорится, сколько хочу столько свойств и ввожу. Т.е. для второго варианта нужна еще дополнителная информация.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839834
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SV,

Спасибо. Осталось только разобраться, как нарисовать всё это на схеме =)
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36839916
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SV,

Я правильно нарисовал?
last scheme
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840013
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLomMAYAKOV_SV,

Я правильно нарисовал?
last scheme

Простите меня, я не вник в суть самой задачи, вы не все рассказали.
Host - это что, Компьютер? А Switch - это хаб/коммутатор?
Нужно их соединить, наверно?
Т.е. это схема или справочник по оборудованию?
Опишите задачу подробнее, тогда я могу сказать правильно или нет.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840034
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SVVeroLomMAYAKOV_SV,
Я правильно нарисовал?
last scheme

Простите меня, я не вник в суть самой задачи, вы не все рассказали.
Host - это что, Компьютер? А Switch - это хаб/коммутатор?
Нужно их соединить, наверно?
Т.е. это схема или справочник по оборудованию?
Опишите задачу подробнее, тогда я могу сказать правильно или нет.

Host - сервер, switch - коммутатор.
В базе хранятся свойства и параметры устройств (название, IP и т.д.). Позже будет таблица с данными, получаемыми по SNMP, по которым будут строиться графики.
Выборки могут быть, например, "все свичи с port_count > 12" или "port_count и if_count устройств в диапазоне device.ip от 100.0.0.0 до 200.200.200.200".
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840081
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLom,

Вот что я проглядел :(
У свичей может быть связь switches.host_id -> hosts.id. Так же может быть связь между свичами.

Если будут связи, то вашу диаграмму нужно подкоректировать так:
1) убрать link_id из таблицы devices_switch
2) убрать device_id из devices и создать это поле в devices_host и devices_switch + FK для каждой связи.
3) Создать таблицу соединений - Connect(id, device_id_from, port_from, device_id_to, port_to)
где device_id_from и device_id_to - две точки связи с devices.id;
port_from и port_to - номера портов.

Таблица соединений будет указывать какие устройства соединены и к каким портам подключены. Если интересно можно длину и тип кабеля занести в таблицу Connect.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840183
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV
Да еще некоторые аттрибуты нужно вводить обязательно... Там, как говорится, сколько хочу столько свойств и ввожу. Т.е. для второго варианта нужна еще дополнителная информация.
Это уже зависит от того, на кого возложить "знания" о наборе конкретных параметров. Вполне возможно, что в конкретном проекте будет проще не нагружать БД логикой. Если же необходимо как можно больше "знаний" и ответственности нагрузить на БД, то тогда как ни крути (т.е. в обоих подходах) будут присутствовать для каждого типа устройства отдельные сущности в БД и функции, с ними работающие. А раз БД контролирует количество и типы параметров, то тогда и дополнительную информацию типа метаданных по этим параметрам следует обязательно иметь в БД, а то реализация подхода получится половинчатая какая-то.

Мне попросту показалось что на данном этапе проблема только в том, как поудобнее хранить данные, а вопрос о распределении логики не мучает. Если так, то вариант с универсальной структурой БД вполне подходит.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840239
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SVVeroLom,

Вот что я проглядел :(
У свичей может быть связь switches.host_id -> hosts.id. Так же может быть связь между свичами.
Если будут связи, то вашу диаграмму нужно подкоректировать так:
2) убрать device_id из devices и создать это поле в devices_host и devices_switch + FK для каждой связи.

Вроде, всё шикарно, но не совсем понятен этот момент. device_id связывать тогда с devices.id?

P.S. И как правильно связи рисовать? Что такое = , \|/ ? Какие мне связи рисовать? Делаю в MySQL workbench.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840240
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragon
Мне попросту показалось что на данном этапе проблема только в том, как поудобнее хранить данные, а вопрос о распределении логики не мучает. Если так, то вариант с универсальной структурой БД вполне подходит.
Проблема в том, что автор новичек, он пока не сообразит как связи сделать.
Его торопят со структурой, видимо. Я бы на его месте создал в базе хоть какой-нибудь вариант и попробовал бы запросы пописать - так быстрее можно освоится и разорбраться.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840280
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLom
Вроде, всё шикарно, но не совсем понятен этот момент. device_id связывать тогда с devices.id?

Да. Т.е. по полю таблицы devices_switch.device_id находится соответсвующая запись devices.id
VeroLom
Что такое = , \|/ ?
У связи есть направление, т.е. она однонаправленная.
По этим штукам определяют направление связи.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840337
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SVVeroLom
Вроде, всё шикарно, но не совсем понятен этот момент. device_id связывать тогда с devices.id?

Да. Т.е. по полю таблицы devices_switch.device_id находится соответсвующая запись devices.id
VeroLom
Что такое = , \|/ ?
У связи есть направление, т.е. она однонаправленная.
По этим штукам определяют направление связи.
Тьфу, опять тупняк :( Зачем нужно направление связи и какое нужно в предложенном случае (switch.dev_id - device.id, host.device_id - device.id)?

На счёт новичка - абсолютно верно. Именно со связями у меня проблема.

З.Ы. Обещаю на выходных прочитать умную книжку =)
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840375
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VeroLom
Тьфу, опять тупняк :( Зачем нужно направление связи и какое нужно в предложенном случае (switch.dev_id - device.id, host.device_id - device.id)?

Често говоря, я не знаком с таким видом обозначений. Но как я понял та чтука - это как бы "присоска". Ну пистолет, который присосками стреляется, выстреливает и прицепляется к нужной таблице.
Если я правильно понял обозначения, то так:
switch.dev_id-||----<-device.id, host.device_id-||----<-device.id

Книгу почитайте, а главное своими руками попробуйте посоздавать все.
У меня раньше такая пробелема была: пытался спроектировать таблицы качественно перед первой реализации. И это работу затормаживало, т.к. опыта не было и долго думал и гадал, как лучше. Нужно придумать вариант - и сразу его опробывать.
На практике многие вещи сразу понятны становятся.
...
Рейтинг: 0 / 0
Помогите с проектированием структуры БД
    #36840392
VeroLom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAYAKOV_SV,

Спасибо, сейчас с начальником согласовали. В принципе, всё ОК. Огромное спасибо за помощь! =)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите с проектированием структуры БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]