|
|
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
Дано: два вида оборудования (будет больше) - свичи и хосты. В базе должны храниться некоторые параметры и характеристики оборудования. Общие поля - "<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-программиста. В общем, я запутался -_- Надо завтра уже предоставить хотя бы черновой вариант структуры :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2010, 23:47 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
VeroLom, Мне первый вариант больше нравится. С тремя таблицами-то. Правда если новый тип устройства будет, то нужно будет создавать новую таблицу. Нехватает таблички - типы устройств. Особенно для второго варианта со свойствами оно необходимо. А то как определить тип устройства то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 08:41 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, Для второго - возможно, но для первого особого смысла не вижу, ведь при выборке будет известно, какой тип устройства нужен, и добавить в SQL-запрос "FROM device_$device_type" - не проблема. Последний вариант пока такой: devices.png Со связями я не особо знаком, так что нарисовал, можно сказать, наугад :) Как тут с ключами поступить? Понятно, что <id> - PRIMARY KEY. Ещё нужны какие-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 10:46 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
Наверное, FOREIGN KEY's: devices_switch.id - devices.dev_id devices_host.id - devices.dev_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 11:09 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 11:12 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
VeroLomи, например, выборки по полю properties.key будут долгие и не очень удобные для нашего C-программиста. Почему? Индекс по id будет, отчего же им тогда долгими быть? А программист один раз напишет функцию, запрашивающую все свойства устройства id и возвращающую их в виде "словаря" (key, value) и всё. А иначе придется плодить отдельные запросы и таблицы для каждого типа устройств. Разве это удобнее программисту? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 11:19 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon Почему? Индекс по id будет, отчего же им тогда долгими быть? А программист один раз напишет функцию, запрашивающую все свойства устройства id и возвращающую их в виде "словаря" (key, value) и всё. А иначе придется плодить отдельные запросы и таблицы для каждого типа устройств. Разве это удобнее программисту? Первый вариант предпологает, что типы устройств будут за ранее определены на стадии проектирования. Просто я предположил, что их небольшое количество будет. Если так получится, что два типа устройста будут с одинаковым набором атрибутов, то лучше все-таки ввести табличку типы устройств. Если БД позволяет - можно лучше создать VIEW. Например vwDevicesHost и vwDevicesSwitch. В случае второго варианта - есть проблема такого плана: как узнать какой набор аттрибутов можно ввести для данного устройства? Ведь этого в приведенной модели невозможно определить. Да еще некоторые аттрибуты нужно вводить обязательно... Там, как говорится, сколько хочу столько свойств и ввожу. Т.е. для второго варианта нужна еще дополнителная информация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 11:41 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, Спасибо. Осталось только разобраться, как нарисовать всё это на схеме =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 11:53 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 12:13 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
VeroLomMAYAKOV_SV, Я правильно нарисовал? last scheme Простите меня, я не вник в суть самой задачи, вы не все рассказали. Host - это что, Компьютер? А Switch - это хаб/коммутатор? Нужно их соединить, наверно? Т.е. это схема или справочник по оборудованию? Опишите задачу подробнее, тогда я могу сказать правильно или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 12:39 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
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". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 12:44 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 12:58 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV Да еще некоторые аттрибуты нужно вводить обязательно... Там, как говорится, сколько хочу столько свойств и ввожу. Т.е. для второго варианта нужна еще дополнителная информация. Это уже зависит от того, на кого возложить "знания" о наборе конкретных параметров. Вполне возможно, что в конкретном проекте будет проще не нагружать БД логикой. Если же необходимо как можно больше "знаний" и ответственности нагрузить на БД, то тогда как ни крути (т.е. в обоих подходах) будут присутствовать для каждого типа устройства отдельные сущности в БД и функции, с ними работающие. А раз БД контролирует количество и типы параметров, то тогда и дополнительную информацию типа метаданных по этим параметрам следует обязательно иметь в БД, а то реализация подхода получится половинчатая какая-то. Мне попросту показалось что на данном этапе проблема только в том, как поудобнее хранить данные, а вопрос о распределении логики не мучает. Если так, то вариант с универсальной структурой БД вполне подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 13:24 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVVeroLom, Вот что я проглядел :( У свичей может быть связь switches.host_id -> hosts.id. Так же может быть связь между свичами. Если будут связи, то вашу диаграмму нужно подкоректировать так: 2) убрать device_id из devices и создать это поле в devices_host и devices_switch + FK для каждой связи. Вроде, всё шикарно, но не совсем понятен этот момент. device_id связывать тогда с devices.id? P.S. И как правильно связи рисовать? Что такое = , \|/ ? Какие мне связи рисовать? Делаю в MySQL workbench. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 13:39 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
Edd.Dragon Мне попросту показалось что на данном этапе проблема только в том, как поудобнее хранить данные, а вопрос о распределении логики не мучает. Если так, то вариант с универсальной структурой БД вполне подходит. Проблема в том, что автор новичек, он пока не сообразит как связи сделать. Его торопят со структурой, видимо. Я бы на его месте создал в базе хоть какой-нибудь вариант и попробовал бы запросы пописать - так быстрее можно освоится и разорбраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 13:39 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
VeroLom Вроде, всё шикарно, но не совсем понятен этот момент. device_id связывать тогда с devices.id? Да. Т.е. по полю таблицы devices_switch.device_id находится соответсвующая запись devices.id VeroLom Что такое = , \|/ ? У связи есть направление, т.е. она однонаправленная. По этим штукам определяют направление связи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 13:52 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVVeroLom Вроде, всё шикарно, но не совсем понятен этот момент. device_id связывать тогда с devices.id? Да. Т.е. по полю таблицы devices_switch.device_id находится соответсвующая запись devices.id VeroLom Что такое = , \|/ ? У связи есть направление, т.е. она однонаправленная. По этим штукам определяют направление связи. Тьфу, опять тупняк :( Зачем нужно направление связи и какое нужно в предложенном случае (switch.dev_id - device.id, host.device_id - device.id)? На счёт новичка - абсолютно верно. Именно со связями у меня проблема. З.Ы. Обещаю на выходных прочитать умную книжку =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 14:09 |
|
||
|
Помогите с проектированием структуры БД
|
|||
|---|---|---|---|
|
#18+
VeroLom Тьфу, опять тупняк :( Зачем нужно направление связи и какое нужно в предложенном случае (switch.dev_id - device.id, host.device_id - device.id)? Често говоря, я не знаком с таким видом обозначений. Но как я понял та чтука - это как бы "присоска". Ну пистолет, который присосками стреляется, выстреливает и прицепляется к нужной таблице. Если я правильно понял обозначения, то так: switch.dev_id-||----<-device.id, host.device_id-||----<-device.id Книгу почитайте, а главное своими руками попробуйте посоздавать все. У меня раньше такая пробелема была: пытался спроектировать таблицы качественно перед первой реализации. И это работу затормаживало, т.к. опыта не было и долго думал и гадал, как лучше. Нужно придумать вариант - и сразу его опробывать. На практике многие вещи сразу понятны становятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2010, 14:23 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36840013&tid=1542548]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 449ms |

| 0 / 0 |
