|
|
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Имеется сеть из коммутаторов, каждый коммутатор может быть соединен с любым числом других коммутаторов, но с каждым из них только один раз. Соединения осуществляются через порты, например, есть коммутаторы №1, №2 и №3, на порту №245 первого коммутатора присоединен порт №45 коммутатора №2, и на порту №67 первого-же коммутатора сидит коммутатор №3 через порт №59. Второй коммутатор может быть аналогично соединен с третим и т.д. Требуется описать эти соединения, пользователи по идентификатору коммутатора должны получить список связанных с ним коммутаторов и номера портов их обоих. В принципе у меня есть мысли как это сделать, но хотелось-бы услышать мнение других ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 19:04 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
В таком случае, чтобы нам всем не повторяться, может, стоит заранее изложить мысли, уже имеющиеся у вас?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 22:52 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Как вариант... Таблица 1 "Комутаторы" - Код и какие-то характеристики Таблица 2 "Порты" - Код и какие-то характеристики Таблица 3 "Соединения" - Код - Код порта - Код комутатора ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 08:43 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
порт может принадлежать только одному коммутатору, поэтому при описании портов - связь с коммутатором. и третья табилца - просто соединение кодов портов - порт левый - порт правый. П.С. по своему опыту - там, где речь идет об описании коммутаторов и соединений, наверняка пойдет речь в скором времени и о соединении с серверами-компьютерами и телефоными развязками, поэтому можно таблицы обобщить для более общего случая соединения копмьютеров с коммутаторами и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 10:19 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
хм, а зачем нужна таблица с портами ? Каких-то особых свойств порт коммутатора не имеет, просто известно, что такой-то тип коммутатора имеет например 28 портов. Mainframe_старый и третья табилца - просто соединение кодов портов - порт левый - порт правый. тут один момент: соединение порт№56 - порт№99 то-же самое, что и порт№99 - порт№56. Первичным ключом такое не поймать. Я мыслил это примерно так-же, но без таблицы с портами, есть таблица Соединения(КоммутаторЛевый int, НомерПортаЛевКоммутатора smallint, КоммутаторПравый int, НомерПортаПравКоммутатора smallint), которая завязана на таблицу со списком имеющихся коммутаторов. Что-бы обойти указанный хитрый момент, хотел добавить check, что код левого коммутатора должен быть меньше кода правого. Просто такой вариант казался несколько подозрительным Кстати действительно, вместо коммутатора может быть прицеплен какой-нибудь компьютер пользователя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 15:56 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelВ таком случае, чтобы нам всем не повторяться... это курсовик... какие там мысли :) классическая задачка, давнененько не всплывала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 16:05 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Mainframe_старыйнаверняка пойдет речь в скором времени о теории графов :) каздый порт может быть соединент только с другим портом - концентратор это только условная группа портов порт = нода (узел) соединение = арка (дуга) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 16:28 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
BULK INSERT Ennor TiegaelВ таком случае, чтобы нам всем не повторяться... это курсовик... какие там мысли :) классическая задачка, давнененько не всплывала не курсовик. А какое классическое решение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2007, 18:42 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
hey BULK INSERT Ennor TiegaelВ таком случае, чтобы нам всем не повторяться... это курсовик... какие там мысли :) классическая задачка, давнененько не всплывала не курсовик. А какое классическое решение ? обычно рекурсия, но зависит от рода графа... read more about ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 10:39 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Граф-то граф, но весьма специальный. Если >порт = нода (узел) то нет путей длинней 1, к одному порту - один провод. Как я понимаю, сабж - задание ограничение для таблицы Код: plaintext Например в Oracle (10g, про 11 не смотрел) можно использовать материализованные представления на предопределенных таблицах с ограничениями. "Бухгалтерская" альтернатива Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 11:50 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
ModelRКак я понимаю, сабж - задание ограничение для таблицы да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 12:11 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
heyхм, а зачем нужна таблица с портами ? Каких-то особых свойств порт коммутатора не имеет, просто известно, что такой-то тип коммутатора имеет например 28 портов. Mainframe_старый и третья табилца - просто соединение кодов портов - порт левый - порт правый. тут один момент: соединение порт№56 - порт№99 то-же самое, что и порт№99 - порт№56. Первичным ключом такое не поймать. Я мыслил это примерно так-же, но без таблицы с портами, есть таблица Соединения(КоммутаторЛевый int, НомерПортаЛевКоммутатора smallint, КоммутаторПравый int, НомерПортаПравКоммутатора smallint), которая завязана на таблицу со списком имеющихся коммутаторов. Что-бы обойти указанный хитрый момент, хотел добавить check, что код левого коммутатора должен быть меньше кода правого. Просто такой вариант казался несколько подозрительным Кстати действительно, вместо коммутатора может быть прицеплен какой-нибудь компьютер пользователяКроме этого должно еще присутствовать ограничения по типу порта. Запихнуть Ethernet в ATM порт - такие действия должны запрещаться. Кроме этого - у некоторых портов должна быть таблица совместимости что в них можно пихать, что нельзя. Гигабит, 100мбит, 10мбит - это все Ethernet и оно может быть воткнуто в Ethrnet порт. Кроме этого у некоторых устройств есть один порт с разными выходами (Ethernet, AUI). Два разных провода в эти два разъема подключить не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 12:11 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Для структуры: Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 14:59 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
ModelR "Бухгалтерская" альтернатива СтороныСоединений(ИДСоединения, Сторона, Коммутатор int, НомерПортаКоммутатора smallint) таже требует ограничения "Сторон ровно две", с аналогичным исходом - сильно зависит от применяемой СУБД. т.е. придется контролировать наличие 2 записей, описывающих соединение ? Вроде как еще проблемнее ... Используется MSSQL Ennor Tiegael if @@error != 0 raiserror('Duplicate ports found!', 16, 1); а зачем тут raiserror ? Ведь при наличии unique ограничения и так выпадет соответствующая ошибка ? Bely Кроме этого должно еще присутствовать ограничения по типу порта ну в первоначальной постановке типы портов неразличались, хотя вообще этот вопрос стоит им задать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 15:57 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
hey Ennor Tiegael if @@error != 0 raiserror('Duplicate ports found!', 16, 1); а зачем тут raiserror ? Ведь при наличии unique ограничения и так выпадет соответствующая ошибка ?Да, наверное все-таки лишний. Лучше всего использовать try...catch в коде, который делает изначальный инсерт, но это если у вас как минимум MSSQL 2005. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 16:14 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Ennor Tiegael hey Ennor Tiegael if @@error != 0 raiserror('Duplicate ports found!', 16, 1); а зачем тут raiserror ? Ведь при наличии unique ограничения и так выпадет соответствующая ошибка ?Да, наверное все-таки лишний. Лучше всего использовать try...catch в коде, который делает изначальный инсерт, но это если у вас как минимум MSSQL 2005 . дык клиент все равно будет обрабатывать исключение, и не важно, какой там mssql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 17:42 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
hey Ennor TiegaelДа, наверное все-таки лишний. Лучше всего использовать try...catch в коде, который делает изначальный инсерт, но это если у вас как минимум MSSQL 2005 . дык клиент все равно будет обрабатывать исключение, и не важно, какой там mssql Клиент может обрабатывать что угодно, но по умолчанию сиквел не откатывает транзакцию, в которой произошла ошибка - чтобы он это делал, нужно включать XACT_ABORT. Если он не включен, то транзакция закоммитится, и никого не волнует, что часть инструкций в ней не прошла. Если же все обернуть в try...catch, но эксепшен вообще не долетит до клиента - вместо этого он будет постфактум поставлен в известность о том, что в транзакции произошла ошибка и та была откачена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 18:08 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
Мне-бы не хотелось отклоняться от темы топика, но я не понимаю, причем тут XACT_ABORT и try/catch. По вашей схеме, вместо проверки check, на таблице висит триггер, который в случае перепутанных аргументов, вместо поднятия ошибки просто меняет местами параметры insert'a и затем производит вставку (кстати, имхо вместо after здесь больше-бы подошел instead of триггер). В случае нарушения ограничения unique, исключение все равно должно быть отправлено клиенту, зачем-же его предварительно ловить в sql-коде сервера ? Да и вообще, если обращения клиентов к БД будут происходить только посредством вызовов ХП (как я собственно и стараюсь всегда делать), а не непосредственного генерирования sql-кода, то эту проверку все-таки лучше именно там и производить, а на таблице оставить просто check ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 20:14 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
heyПо вашей схеме, вместо проверки check, на таблице висит триггерМда, позор. Забыл про table-level constraints (в общем-то, неудивительно, т.к. ни разу в жизни не пользовался): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2007, 22:45 |
|
||
|
Схема БД для соединения коммутаторов
|
|||
|---|---|---|---|
|
#18+
hey Bely Кроме этого должно еще присутствовать ограничения по типу порта ну в первоначальной постановке типы портов неразличались, хотя вообще этот вопрос стоит им задатьЕще я бы к портам и устройствам добавил их состояние: В работе, отключено, на профилактике, не работает итп. Таким образом можно метить не работающие порты и кабели с обрывом, чтобы с ними никто не пытался ничего скоммутировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2007, 11:26 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34754026&tid=1544335]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
213ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 250ms |
| total: | 588ms |

| 0 / 0 |
