powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Основы проектирования БД
20 сообщений из 20, страница 1 из 1
Основы проектирования БД
    #35072974
STE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STE
Гость
БД: mysql 5.x

Задача: создать БД инвенторизации серверов. На данный момент данные хранятся в excel.

Пример: Вся информация о конфигурации сервера привязывается к определенному хосту, так как мы понимаем сервер может буть как физическим так и виртуальным. В начале собирается информация о хосте: тип, имя, статус и т.д порядка 10 полей. Далее собираются данные о конфигурации железа на этом хосте: вендор, модель, серийный номер и т.д порядка 20 полей. Далее собирается информация о физическом расположении: номер кабинета, номер ячейки и т.д. порядка 10 полей. Далее об операционной системе: название, версия, временная зона и т.д порядка 10 полей. О сервисной консоли и серийной консоли, порядка 10 полей. И наконец информация, как органозованы зеркалирование, виртуальные менеджеры разделов диска и т.д. еще порядка 10 полей.

В принципе общее число полей пока составляет 60. Читабильность такой таблицы по моему довольна затруднена и не удобна. По моему с точки зрения производительности не совсем хорошо, если такие таблицы будут иметь место в БД.

Вопрос: Как правильно проектировать такого типа БД, так как такая же ситуация с индивидуалами о которых тоже собирается информация: домашний, рабочий, адрес по прописке, адрес физического нахождения и т.д.

Наши админы БД говорят все держать в одной таблице, но у меня желание логически разнести часть данных по разным таблицам и привязать их по ID к хосту. Так как виртуальные хосты например не имеют информации о физическом расположении, о конфигурации железа, сервис консоли.

Пример:

host
------------
host_id
host_name
...


hardware
------------
hardware_id
host_id
vendor
model
...

location
------------
location_id
host_id
cabinetid
rac_size
...

Что посоветуют специалисты?
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35074812
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитать книжки.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35075496
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо книжек - потом и в своём примере не разберёшься.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35076939
STE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STE
Гость
Спасибо за ответы, очень помогли :)

Меня больше интересует, хорошо или нет в таблицах держать пустые поля. Так как, если следовать советам моих админов, то дыры в таблице будут. Если следовать моему варианту, то все будет кашерно, но я не знаю правильно ли это?
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35077068
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STEвсе держать в одной таблице, но у меня желание логически разнести часть данных по разным таблицамЯ бы сделал нечто среднее (картинка). Таким образоам у вас была бы одна основная таблица (админы правы) SupportingTableTypeTable(-Strings) где хранились бы все данные без "дырок" и дополнительные таблицы для ваших host, hardware, location (т.к. они тоже нужны, притом нужны именно отдельные - Вы правы). Работать естественно (если данные предпологается держать на MSSQL) только с представлениями, и данные добавлять через instead of триггеры.
Скрипт для таблиц (просто как пример, представления и триггеры, надеюсь, сами понимаете как делать):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'SupportingTableTypeTable')
	BEGIN
		DROP  Table SupportingTableTypeTable
	END
GO
CREATE TABLE SupportingTableTypeTable
(	EnumValue	int IDENTITY( 1 , 1 ) NOT NULL,
	EnumName	nvarchar( 256 ) NOT NULL,
	CONSTRAINT PK_SupportingTableType PRIMARY KEY CLUSTERED (EnumValue ASC)
)
Go

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'SupportingTableTypeTableStrings')
	BEGIN
		DROP  Table SupportingTableTypeTableStrings
	END
GO
CREATE TABLE SupportingTableTypeTableStrings
(	EnumLocalID			int IDENTITY( 1 , 1 ) NOT NULL,
	EnumValue			int NOT NULL,
	DisplayName			nvarchar( 256 ) NOT NULL,
	DisplayNameTemplate	nvarchar( 256 ) NOT NULL,
	CONSTRAINT PK_SupportingTableTypeTableStrings PRIMARY KEY CLUSTERED (EnumLocalID ASC)
)
Go

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'SupportingTableTable')
	BEGIN
		DROP  Table SupportingTableTable
	END
GO
CREATE TABLE SupportingTableTable
(	SupportingTableID		int IDENTITY( 1 , 1 ) NOT NULL,
	IsValid					bit NOT NULL,
	SupportingTableType		int NOT NULL,
	[Name]					nvarchar( 128 ) NOT NULL,
	Description				nvarchar( 256 ) NOT NULL,
	CreatedBy				nvarchar( 256 ) NOT NULL,
	CreatedDateTime			datetime NOT NULL,
	ModifiedBy				nvarchar( 256 ) NOT NULL,
	ModifiedDateTime		datetime NOT NULL,
	TableRowVersion			timestamp NOT NULL,
	CONSTRAINT PK_SupportingTableTable PRIMARY KEY CLUSTERED (SupportingTableID ASC),
	CONSTRAINT FK_SupportingTableTable_SupportingTableTypeTable
		FOREIGN KEY (SupportingTableType) REFERENCES SupportingTableTypeTable(EnumValue)
)
GO

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'HostTable')
	BEGIN
		DROP  Table HostTable
	END
GO
CREATE TABLE HostTable
(	HostName				nvarchar( 256 ) NOT NULL,
	SupportingTableID		int NOT NULL,
	CONSTRAINT PK_HostTable PRIMARY KEY CLUSTERED (SupportingTableID ASC),
	CONSTRAINT FK_HostTable_SupportingTable 
		FOREIGN KEY (SupportingTableID) REFERENCES SupportingTableTable (SupportingTableID)
)

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'HardwareTable')
	BEGIN
		DROP  Table HardwareTable
	END
GO
CREATE TABLE HardwareTable
(	HardwareName			nvarchar( 256 ) NOT NULL,
	SupportingTableID	int NOT NULL,
	CONSTRAINT PK_HardwareTable PRIMARY KEY CLUSTERED (SupportingTableID ASC),
	CONSTRAINT FK_HardwareTable_SupportingTable 
		FOREIGN KEY (SupportingTableID) REFERENCES SupportingTableTable (SupportingTableID)	
)
	
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'LocationTable')
	BEGIN
		DROP  Table LocationTable
	END
GO
CREATE TABLE LocationTable
(	LocationName			nvarchar( 256 ) NOT NULL,
	SupportingTableID	int NOT NULL,
	CONSTRAINT PK_LocationTable PRIMARY KEY CLUSTERED (SupportingTableID ASC),
	CONSTRAINT FK_LocationName_SupportingTable 
		FOREIGN KEY (SupportingTableID) REFERENCES SupportingTableTable (SupportingTableID)		
)
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35077132
STE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
STE
Гость
Спасибо Бык, за ответ.
Твой вариант мне показался немного запутанным, немного непонятным (видимо я так изложил свой вопрос), но смотрится несомненно круто :)

Спасибо еще раз, если будет время, я постараусь приатачить свою картинку.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35077330
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сказанное выше перевожу на Русский -


обломись, чувак
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35077635
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
та нее - я ш па добраму... :)
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35081969
STEСпасибо Бык, за ответ.
Твой вариант мне показался немного запутанным, немного непонятным (видимо я так изложил свой вопрос), но смотрится несомненно круто :)

БД с шестью таблицами НЕ БЫВАЕТ. Одна-две максимум.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35082244
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват. Вместо двух правых - сделаю одну, а вместо левых буду использовать запросы.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35096138
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знакомый с основами проектиро
БД с шестью таблицами НЕ БЫВАЕТ. Одна-две максимум.

Нічего не понял. Еслі у меня в базе 11 -15 табліц і 50 вьюх, то я что-то делаю не так???
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35096348
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11-15 - это очень большая база...
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35096376
nosov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 автор
и охота тебе возится ???
есть ПО которое само собирает все данные о сети
и затем делает отчет.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35102345
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой бык 11-15 - это очень большая база...
А там ещё и строк по 150к в таблице! УЖОСНАХ!
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35102572
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Срочно делить на несколько баз!
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35104217
Vitafresh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор11-15 - это очень большая база...
Это типо прикол, да?
А если в базе порядка 500 таблиц и некоторые по несколько гиг, то это какая база? ;)
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35104311
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То это база занимает несколько терабайтов.
Ф топку такую базу.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35104363
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бухой быкТо это база занимает несколько терабайтов.
Ф топку такую базу.
:) Если всю БД нельзя запомнить за один раз, она слишком большая для "слива" конкурентам, следовательно, никому не нужна.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35104413
Vitafresh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору по сути топика:
Судя по всему база создается для внутреннего пользования. А если так, то создавайте так как лично вам как разработчику удобнее. Не охота возиться с нормализацией -- и не надо! ну и пусть все лежит в одной плоской таблице.

Будут "дыры" в некоторых полях, ну и что? Кому они мешают эти "дыры"? Скорей всего вряд ли в средней компании наберется больше сотни, ну пусть тысячи серверов, а следовательно вопрос производительности на таких объемах не стоит. В общем какой бы вариант не выбрали -- это будет лучше, чем хранить данные в Excel'e.
...
Рейтинг: 0 / 0
Основы проектирования БД
    #35104459
Фотография бухой бык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот-вот! И 1-2 таблицы. Не больше!
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Основы проектирования БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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