Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Основы проектирования БД / 20 сообщений из 20, страница 1 из 1
19.01.2008, 00:04
    #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
21.01.2008, 08:58
    #35074812
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы проектирования БД
Почитать книжки.
...
Рейтинг: 0 / 0
21.01.2008, 12:16
    #35075496
бухой бык
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы проектирования БД
Не надо книжек - потом и в своём примере не разберёшься.
...
Рейтинг: 0 / 0
21.01.2008, 17:54
    #35076939
STE
STE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы проектирования БД
Спасибо за ответы, очень помогли :)

Меня больше интересует, хорошо или нет в таблицах держать пустые поля. Так как, если следовать советам моих админов, то дыры в таблице будут. Если следовать моему варианту, то все будет кашерно, но я не знаю правильно ли это?
...
Рейтинг: 0 / 0
21.01.2008, 18:31
    #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
21.01.2008, 19:02
    #35077132
STE
STE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Основы проектирования БД
Спасибо Бык, за ответ.
Твой вариант мне показался немного запутанным, немного непонятным (видимо я так изложил свой вопрос), но смотрится несомненно круто :)

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


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

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

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

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


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