ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: kramer
27. октября 2012 01:07

tsql

Продолжаю серию практических постов о реализации различных структур в БД. В этом посте речь пойдет о таблицах описывающих марку, модель, модификацию машины, а также ее параметры. Начало серии смотри в этом Описания таблиц отвечающих за человека, паспорт, права (часть 1) посте. Оформление таблиц делалось в соответствии с Об одном из способов именования таблиц, представлений, хранимых процедур.... Единственное отличие это то, что все части и вспомогательные сущности помещаются в таблицы с "типом" TOB. И еще один важный момент касающийся именно описания машин: в скриптах группой моделей называется, то что обычно называют модель, а моделью, то что обычно называют модификацией. Так что, если вы будете применять эти скрипты в своем проекте, то переименуйте эти две таблицы соответственно. Сначала скрипт будет идти просто как текст поста, чтобы вы могли посмотреть о чем идет речь. Потом будут диаграммы этой части БД. Потом скрипт целиком для накатывания на БД. И в конце архив с TSQL скриптами для каждой сущности в отдельности, для того чтобы их было удобно использовать в проекте базы данных в солюшене. Для простоты ссылки ведущие на таблицы, описания которых я не собираюсь публиковать, оформлены просто как значения типа идентификатор (в общем скрипте). В этом проекте это GUID (uniqueidentifier).


USE [CarDB]
GO

-- тип корпуса ТС, соответствует модели машины как 1 к 1
-- например, "седан", "хэтчбэк", "универсал", "джип" ...
CREATE TABLE [dbo].[tblVehicleDICBodyType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nvarchar(32) NOT NULL, -- это надпись которую видит (сразу) пользователь в GUI 
	Comment nvarchar(max) NULL     -- некое средней длины дополнительное пояснение
)

/*
Список типов тормозов транспортного средства
*/
CREATE TABLE [dbo].[tblVehicleDICBrakeType]
(
	Id		uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
	Value	nvarchar(64)  NULL, 
	Comment nvarchar(max) null
)

-- Список типов брэндов: неизвестен, отечественный, зарубежный
CREATE TABLE [dbo].[tblVehicleDICBrandType]
(
	Id			uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value		nvarchar(32) NOT NULL, 
	Comment		nvarchar(max) NULL     
)

/*
Варианты расположения цилиндров
*/
CREATE TABLE [dbo].[tblVehicleDICCylindersArrangement]
(
	Id		uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
	Value	nvarchar(32)  NULL, 
	Comment nvarchar(max) null
)

-- ведущие колеса транспортного средства: передние, задние, полный привод
CREATE TABLE [dbo].[tblVehicleDICDriveWheelsType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(32) NOT NULL, -- ведущие колеса транспортного средства - строка
	Comment nvarchar(max) NULL  -- некое дополнительное пояснение
)

CREATE TABLE [dbo].[tblVehicleDICEngineArrangement]
(
	Id		uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
	Value	nvarchar(32)  NULL, 
	Comment nvarchar(max) NULL
)

-- тип двигателя: карбюраторный, инжекторный, дизельный
CREATE TABLE [dbo].[tblVehicleDICEngineType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(64) NOT NULL, -- тип двигателя - строка
	Comment nvarchar(max) NULL  -- некое дополнительное пояснение
)

-- тип и марка топлива
CREATE TABLE [dbo].[tblVehicleDICFuelType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(64) NOT NULL, -- тип и марка топлива - строка
	Comment nvarchar(max) NULL  -- некое дополнительное пояснение
)

-- где произведено ТС: неизвестно, в россии, за рубежом
CREATE TABLE [dbo].[tblVehicleDICRussianProduction]
(
	Id			uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value		nvarchar(32) NOT NULL, 
	Comment		nvarchar(max) NULL     
)

/*
Список вариантов подвесок
*/
CREATE TABLE [dbo].[tblVehicleDICSuspension]
(
	Id		uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
	Value	nvarchar(max)  NULL, 
	Comment nvarchar(max) null
)

-- тип коробки передач: ручная, автоматическая ...
CREATE TABLE [dbo].[tblVehicleDICTransmissionType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(128) NOT NULL, -- тип коробки передач - строка
	Comment nvarchar(max) NULL  -- некое дополнительное пояснение
)

-- Параметры ТС.
-- Может быть связана с tblVehicleBOBVehicle или с tblVehicleBOBModel
-- Параметры, указанные как ссылка из tblVehicleBOBVehicle, 
-- должны иметь приоритет над параметрами из tblVehicleBOBModel
CREATE TABLE [dbo].[tblVehicleBOBVehicleParams]
(
	Id		   uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
	BodyType   uniqueidentifier REFERENCES tblVehicleDICBodyType(Id)   NOT NULL, -- тип корпуса машины
		
	Weigth   int NULL, -- вес машины в килограммах
	
	Length   int NULL, -- длина машины в миллиметрах
	Width    int NULL, -- длина машины в миллиметрах
	Height   int NULL, -- длина машины в миллиметрах
	
	WheelBase       int NULL, -- колесная база в миллиметрах
	FrontWheelGauge int NULL, -- колея передних колес в миллиметрах
	RearWheelGauge  int NULL, -- колея задних колес в миллиметрах
	RoadClearance   int NULL, -- клиренс в миллиметрах

	FuelType     uniqueidentifier REFERENCES tblVehicleDICFuelType(Id) NULL,-- тип и марка топлива
	GasCanBeUsed bit NULL, -- может ли машина ездить на газе

	EngineType   uniqueidentifier REFERENCES tblVehicleDICEngineType(Id)       NULL, -- тип двигла
	EngineVolume int NULL, -- объем двигателя в кубических сантиметрах
	EnginePower  int NULL, -- мощьность двигателя в лошадиных силах
	
	Transmission uniqueidentifier REFERENCES tblVehicleDICTransmissionType(Id) NULL, -- тип коробки
	
	DriveWheels  uniqueidentifier REFERENCES tblVehicleDICDriveWheelsType(Id)  NULL, -- колеса ведущие
	
	PlacesCount  int NULL, -- количество мест
	DoorsCount   int NULL,  -- количество дверей
	
	Torque nvarchar(64) null, -- Крутящий момент, Н•м при об/мин
	IsSupercharge bit null, -- Наличие наддува
	
	ValvesForCylinder int null, -- Количество клапанов на цилиндр
	IsABS bit null, -- Наличие АБС
	IsESP bit null, -- Система курсовой устойчивости
	Acceleration nvarchar(24) null, -- Разгон с места до 100 км/ч, с
	MaxSpeed int null, -- Максимальная скорость, км/ч
	FuelExpense nvarchar(24) null, -- Средний условный расход топлива, л/100 км
	
	FrontBrake uniqueidentifier REFERENCES tblVehicleDICBrakeType(Id)       NULL, -- Тормоза передние
	BackBrake uniqueidentifier REFERENCES tblVehicleDICBrakeType(Id)       NULL, -- Тормоза задние
	CylindersArrangement uniqueidentifier REFERENCES tblVehicleDICCylindersArrangement(Id) NULL, 
	EngineArrangement uniqueidentifier REFERENCES tblVehicleDICEngineArrangement(Id)       NULL, 
	FrontSuspension uniqueidentifier REFERENCES tblVehicleDICSuspension null, -- Передняя подвеска
	BackSuspension uniqueidentifier REFERENCES tblVehicleDICSuspension null, -- Задняя подвеска
	LastChangeDate datetime2
)

-- марка ТС это название ее производителя, 1 марка соотв. N моделям транспротного средства
-- например, "BMW", "Audi", "Maserati", "Saleen", "Koenigsegg", "Тагаз", "SsangYoung" ...
-- если тип брэнда не понадобится (что весьма вероятно), то надо его похарчить в тиши
CREATE TABLE [dbo].[tblVehicleTOBVehicleMark]
(
	Id			uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value		nvarchar(32) NOT NULL, -- это надпись которую видит (сразу) пользователь в GUI 
	Comment		nvarchar(max) NULL,     -- некое средней длины доп. пояснение
	BrandType	uniqueidentifier references tblVehicleDICBrandType(Id) null 
)

-- класс машин или группа моделей
-- на самом деле это в простонародье как раз модель 
-- надо бы переименовать в будущем чтобы не путаться
-- например: "C", "E", "3", "A8" 
-- внимание! СООТВЕТСТВУЕТ НА САМОМ ДЕЛЕ МОДЕЛИ (В ТЕРМИНАХ auto.mail.ru)
CREATE TABLE [dbo].[tblVehicleTOBModelGroup]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nvarchar(32) NOT NULL, -- строка с надписью в интерфейсе
	Comment nvarchar(max) NULL,    -- некое дополнительное пояснение
	
	Mark    uniqueidentifier REFERENCES tblVehicleTOBVehicleMark(Id) NOT NULL  -- марка машины
)

-- модель машины, 1 марка машины соответствует N моделям транспортного средства
-- например, "E36 335i MT" 
-- в полное название конкретной модели входит: 
--     название корпуса (производительское, если есть, например E45), 
--     объем двигателя,
--     буквы типа двигателя (если есть),
--     остальные буквы обозначающие модификацию
-- внимание! СООТВЕТСТВУЕТ НА САМОМ ДЕЛЕ МОДИФИКАЦИИ (В ТЕРМИНАХ auto.mail.ru)
CREATE TABLE [dbo].[tblVehicleBOBModel]
(
    Id         uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value      nvarchar(70)                                            NOT NULL, -- название модели, полное
	Comment    nvarchar(max)                                           NULL, -- некое длинное пояснение
    ModelGroup uniqueidentifier REFERENCES tblVehicleTOBModelGroup(Id) NOT NULL, -- класс/группа моделей
	VehicleParams uniqueidentifier REFERENCES [tblVehicleBOBVehicleParams](Id) NULL, -- ссылка на параметры ТС

	-- фиг его знает почему, но оно тут :) 
	-- это придумал не я, я его хотел зпихнуть в tblVehicleBOBVehicle
	-- ну и ладно сами себе карлосы кастанеды
	IsRussianProduction uniqueidentifier REFERENCES tblVehicleDICRussianProduction(Id) NULL, -- российское производство

	LastChangeDate datetime2
)

-- серия выпуска для модели, одной модели может соответствовать много серий или ни одной 
CREATE TABLE [dbo].[tblVehicleBOBSeries]
(
    Id                uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	SeriesLabel       nvarchar(16)   NULL, -- краткое обозначение серии для ориентации в таблице
    Comment           nvarchar(max)  NULL, -- некий длинный коментарий или пояснение для серии  
    
    Model             uniqueidentifier REFERENCES tblVehicleBOBModel(Id) NOT NULL, -- модель машины
	ProdBegDate       date NOT NULL, -- дата начала производства этой серии
	ProdEndDate       date NOT NULL, -- дата конца  производства этой серии	
	VINIsReq          bit  NOT NULL, -- признак необходимости ввода VIN для этой серии
	ChassisNumIsReq   bit  NOT NULL, -- признак необходимости ввода номера шасси для этой серии
	VINRegExp         nvarchar(1024) NULL, -- строка с рег. выраженим для проверки VIN  
	ChassisNumRegExp  nvarchar(1024) NULL,  -- строка с рег. выраженим для проверки номера шасси
	LastChangeDate datetime2
)
параметры машины таблицы БД
параметры машины марка модель серия

Это скрипт целиком в виде одного файла - CarDB_Vehicle.sql (18,46 kb).

А это скрипты создания каждой отдельной таблицы - CarDBVehicleByTable.zip (9,64 kb),
для использования в проекте базы данных в солюшене.

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Описания таблиц отвечающих за владение машиной (часть 2)
Продолжаю серию практических постов о реализации различных структур в БД. В этом посте речь пойдет о таблицах описывающих владение автомобилем (транспортным средством). Начало серии смотри в этом Описания таблиц отвечающих за человека, паспорт, права (часть 1) посте. Оформление таблиц делалось в соответствии с Об одном из способов именования таблиц, представле...

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

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий