Железо, пользователи, сеть

Модераторы: kdv, CyberMax

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Железо, пользователи, сеть

Сообщение londinium » 21 авг 2006, 18:47

Здравствуйте, Господа!

Работаю я anykey-щиком на государственной службе и для облегчения работы себе и приобретения начальных навыков в клиент-сервер решил спроектировать базу данных подведомственного оборудования, пользователей и сетевых настроек. В этом и прошу Вашей помощи.
Итак, в базе необходимо хранить список пользователей, список комнат, тип оборудования, его инвентарный номер и статус, а также IP-адресацию компьютеров. Пока пришел к такой структуре таблиц:

Код: Выделить всё

CREATE TABLE REFWORKERS ( 
ID INTEGER NOT NULL, 
SURNAME VARCHAR(50) 
); 
REFWORKERS - справочник сотрудников (Иванов, Петров, Сидоров)

Код: Выделить всё

CREATE TABLE REFSTATUS ( 
ID INTEGER NOT NULL, 
DESCRIPTION VARCHAR(20) NOT NULL 
); 
REFSTATUS - справочник статуса оборудования(работает, ремонт, подано на списание, списано)

Код: Выделить всё

CREATE TABLE REFROOMS ( 
ID INTEGER NOT NULL, 
NUMBER VARCHAR(15) 
); 
REFROOMS - справочник комнат(104,105, подсобка и т.п)

Код: Выделить всё

CREATE TABLE REFEQUIPMENTTYPE ( 
ID INTEGER NOT NULL, 
DESCRIPTION VARCHAR(150) 
); 
REFEQUIPMENTTYPE -справочник типов оборудования (компьютер, монитор, принтер, ксерокс).

Код: Выделить всё

CREATE TABLE EQUIPMENT ( 
ID INTEGER NOT NULL, 
INVENTARNUMBER VARCHAR(10) NOT NULL, 
TYPEEQ INTEGER NOT NULL, 
DESCRIPTION VARCHAR(100) NOT NULL, 
WORKER INTEGER NOT NULL, 
PLACE INTEGER NOT NULL, 
STATUS INTEGER NOT NULL 
); 
ALTER TABLE EQUIPMENT ADD CONSTRAINT FKPLACE FOREIGN KEY (PLACE) REFERENCES REFROOMS (ID); 
ALTER TABLE EQUIPMENT ADD CONSTRAINT FKSTATUS FOREIGN KEY (STATUS) REFERENCES REFSTATUS (ID); 
ALTER TABLE EQUIPMENT ADD CONSTRAINT FKTYPE FOREIGN KEY (TYPEEQ) REFERENCES REFEQUIPMENTTYPE (ID); 
ALTER TABLE EQUIPMENT ADD CONSTRAINT FKWORKER FOREIGN KEY (WORKER) REFERENCES REFWORKERS (ID); 
EQUIPMENT - таблица оборудования.
Поле INVENTARNUMBER - инвентарный номер
Поле DESCRIPTION - описание(Samsung SyncMaster 753DFX, HP LaserJet 1320n и т.п)

Пока думаю в таблице EQUIPMENT хранить все подряд оборудование(т.е. не делать отдельных таблиц под принтеры, ксероксы, мониторы)

База будет крутиться под FireBird SuperServer на Windows 2k/XP, максимальное количество пользователей – 20 человек(в далекой перспективе), на данный момент - 2.

Вопросы таковы:
--насколько я хорошо/плохо придумал структуру таблиц
-- как лучше хранить IP-адресацию, а то пихать ее в таблицу EQUIPMENT пока не хочется ибо чистый ксерокс(не МФУ) при всем желании не имеет IP-адреса.

Четкой привязки IP-адреса нет, может меняться как пользователь(уволился), так и компьютер(сгорел, уехал на ремонт)

Заранее всем спасибо за ответы и просьба сильно не ругаться :)

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 22 авг 2006, 08:08

Структура более-менее нормальная. На IP адреса я бы задействовал DHCP и не заморачивался, а хранил бы MAC адреса. Но тут возникает проблема смены частей - замена монитора, сетевой карты и т.д. а отсюда возможно дробление оборудования на части и спец. таблица для объединения этих частей в (текущие) сборки.
Кроме того возможно в будущем тебе захочется хранить не текущий статус, а историю: такого-то введен в эксплуатацию, тогда-то отдан в ремонт, списан и т.д.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 22 авг 2006, 09:13

Предлагаю ввести таблицу типа Workplace (рабочее место или размещение) а к нему уже привязывать и сотрудника (занимающего это место), к нему же привязывать оборудование (на этом месте установленное). таблица будет зависеть от таблицы помещений и от таблицы Department (отделы, подразделения) Ввести таблицу типов рабочих мест (серверный шкаф, рабочее место бухгалтера, терминал, склад и т.п.)
В таблице Equipment поле Name предлагаю не использовать, а связаться с таблицей Nomenclature где уже указывать тип устройства, производителя и тп. (это для того чтобы потом небыло "пересортицы" в наименованиях оборудования)

londinium
Сообщения: 27
Зарегистрирован: 17 апр 2006, 14:04

Сообщение londinium » 22 авг 2006, 10:15

Предлагаю ввести таблицу типа Workplace (рабочее место или размещение) а к нему уже привязывать и сотрудника (занимающего это место), к нему же привязывать оборудование (на этом месте установленное).
Отличная идея. :D

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 22 авг 2006, 10:46

londinium писал(а):
Предлагаю ввести таблицу типа Workplace (рабочее место или размещение) а к нему уже привязывать и сотрудника (занимающего это место), к нему же привязывать оборудование (на этом месте установленное).
Отличная идея. :D
Ничего "отличного". Куча оборудования у тебя не привяжется к конкретному рабочему месту. Например, переносной HDD - куда? А что-то такое у тебя и так есть - REFROOMS. Только доработать чуть.
А вот с комплектующими ты вообще ничего не продумал, конечно. А ведь учитывать захочется...
Журнал изменений статуса вести нужно для каждого оборудования - когда пришло, когда в ремонт сдано, когда списано.
Необходимо предусмотреть перемещение между "рабочими местами" и комнатами - хранить ли историю или только текущее положение.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 22 авг 2006, 12:12

повторюсь что таблица Worplace имеется ввиду не только рабочее место, но и "размещение" а у этой таблицы есть таблица подтипов склад, бухгалтер, терминал, диагностический стенд на колёсах :)
переносной HDD всё равно где то (место, размещение) числится, т.е. если вещь общего пользования то её иногда берут попользоваться, но расположена она обычна всегда например у "ответственного" сотрудника, например материально ответсвенного лица или просто человека который часто ею пользуется, или чаще всего лежит "на складе". В задачу не входит отслеживание где мобильного устройства во времени и в простанстве в такой детализации, достаточно чтобы в отчёте видно было что числится за тем то, там то должно находится.... или вы предлагаете учитывать что Вася передал гаджет Пете Петя Коле каждые 1-2 часа

а на счёт доработки REFROOMS не совсем согласен, тут принципиально нужно учитывать что рабочее место (расположение), зависит и от помещения (территориально) и от подразделения, отдела и тд (административно)

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 22 авг 2006, 12:24

Т.е. по твоим словам, Workplace будет содержать в себе и Refrooms, и Refworkers, и ещё кучу всего.
Тогда зачем упомянутые сущности в отдельности?
Твоё предложение выливается в "справочник справочников" что-то типа:

Код: Выделить всё

ID CONCEPT NAME
 0       0 Справочники
 1       0 Юзеры
 2       0 Комнаты
 3       0 Подразделения
 4       1 Пупкин
 5       1 Васечкин
 6       2 Кладовка
 7       3 Сбыт
 8       3 Склад
с тем, чтобы ссылка на "местоположение" могло быть чем угодно, хоть комнатой, хоть пользователем.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 22 авг 2006, 13:17

нет, справочник справочников я не предлагаю, я предлагаю что то типа регистра

Код: Выделить всё

CREATE TABLE WORKPLACE (
    ID             TID NOT NULL /* TID = INTEGER */,
    ID_DEPARTMENT  TID /* TID = INTEGER */,
    ID_WORKMAN TID /* TID = INTEGER */,
    ID_BUILD       TID /* TID = INTEGER */,
    ID_TYPE        TID /* TID = INTEGER */,
    PHONE          TSTRING /* TSTRING = VARCHAR(255) */
);
если есть более интересная идея всегда готов рассмотреть

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 22 авг 2006, 15:00

В таком регистре у тебя многие поля будут null, как мне видится. У меня вообще к null неприятие выработанное...

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 22 авг 2006, 17:06

значение null если и будет то крайне мало, да вообщем то для полей типа ID (FK) null это нормально, над такими полями сложения, конкатенации и других всяких обработок в которых null бяка не учавствуют.... мож я и не прав тоды просветите

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 авг 2006, 17:59

обработок в которых null бяка не учавствуют.... мож я и не прав тоды просветите
а ты Дейта почитай "Введение в системы баз данных". Главу "Отсутствующая информация". На ночь.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 23 авг 2006, 16:53

а если таблицы ссылаются друг на друга, без null в FK не обойтись, да и в данном случае "отсутствие информации" т.е. Null таблицы Workplace в поле ID_WORKMAN просто информирует нас о том что на данном рабочем месте никто не сидит, и всё
вообще незря же PK уже подразумевает наличие not null условия, а в FK это оставлено на разработчика, если ему надо задать ограничение на null в FK, если это действительно надо по требованиям бизнес правила его БД то пожалуйста... стандарт SQL такой

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 авг 2006, 17:22

если это действительно надо по требованиям бизнес правила его БД то пожалуйста
я тебе про это и говорю. Дейта ты судя по всему, не читал. Рекомендую почитать упомянутую главу, там как раз про null в FK написано.

ZanZag
Сообщения: 12
Зарегистрирован: 15 авг 2006, 00:38

Сообщение ZanZag » 23 авг 2006, 23:26

угу-угу...
не читали оне, а зря, право сударь, напрасно.

отсутствие null (что перевести можно как "неопределено/неизвестно") в данных есть правило хорошего тона и залог безпроблемности в данных...
а коли оно (null) есть, то значит не особо то модель хорошая...

когда-то, на заре моей юности, мне быстро гуру доказали, что не бывает случаев где нельзя избежать null.

в указанном случае решить вопрос довольно просто, в справочнике заводиться записть с ID 0 и значением "раб. место не занято" или что-то подобное.... и никакие null не потребуются...

Andrew Sagulin
Сообщения: 53
Зарегистрирован: 11 мар 2005, 15:44

Сообщение Andrew Sagulin » 24 авг 2006, 08:21

ZanZag писал(а):в указанном случае решить вопрос довольно просто, в справочнике заводиться записть с ID 0 и значением "раб. место не занято" или что-то подобное.... и никакие null не потребуются...
Здесь это уже обсуждалось...
http://forum.ibase.ru/phpBB2/viewtopic. ... highlight=

Вот скажите мне, пожалуйста, чем вот так вот уж очень сильно, если знать про особенности трёхзначной логики, null отличается от специального значения? Какая разница, пишем ли мы is null или = 0.
Не поймите меня неправильно: я не спорю, я на самом деле хочу увидеть реальный пример, когда null в FK неудобен, или опасен.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 24 авг 2006, 08:50

Вообще конечно мне тут лучше уточнить что в моей схеме всё таки нет таких моментов как null в FK. схему я приводил по памяти больше, а при просмотре уточнил что связка на таблицу Workplace идёт от таблицы Workman (есть поле ID_workplace), а во всех других случаях в таблице размещений нет наличия null в связи с принципом работы модели бд.
А на счёт добавления записи "не указано" в принципе тоже вариант, хотя откуда в таблице работников может появиться человек с такой фамилией ;) во всех случаях есть свои тараканы.
лучше бы господа хорошие предложили что нибудь по существу темы...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 24 авг 2006, 10:13

Вот скажите мне, пожалуйста, чем вот так вот уж очень сильно, если знать про особенности трёхзначной логики, null отличается от специального значения? Какая разница, пишем ли мы is null или = 0.
офигеть. тебе Дейта как - сюда перепечатать? Или ты сам как-нибудь? :)

null в FK не может быть опасен. это или удобно, или неудобно. это или правильно для конкретной модели, или неправильно.

Andrew Sagulin
Сообщения: 53
Зарегистрирован: 11 мар 2005, 15:44

Сообщение Andrew Sagulin » 24 авг 2006, 10:55

kdv писал(а): офигеть. тебе Дейта как - сюда перепечатать? Или ты сам как-нибудь? :)
Намёк понял, ухожу... :) А Дейта обязательно куплю при случае.
В поисках null-ов забрёл сюда. Может быть кому-нибудь будет интересно.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 15 сен 2006, 14:59

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

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 15 сен 2006, 16:06

Не сочтите за рекламу.
Zhur писал(а):Дейта не читал, так как живу в маленьком городе с маленьким ассортимментом литературы.
А http://www.books.ru тебе на что? В магазинах в основном поп. литературу по компьютерам продают, то есть такую, которая быстро расходится. Cпец. литературу даже у нас найти сложно. В последнее время только через интернет-магазины закупаюсь. Скажу даже так - Дейта, Борри, "Мир InterBase" брал именно там. Единственный минус - товар около трех недель идет.

Ответить