Добавил:
Всем студентам большой привет! Раньше сам усиленно искал материалы на этом сайте. Пришло время делиться своими наработками за все 6 лет обучения. Всем желаю удачи! Штурмуйте, дерзайте и творите! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
06.05.2019
Размер:
121.86 Кб
Скачать

Концептуальная модель база данных

Физическая модель базы данных

Created: 11.04.2014

' Modified: 11.04.2014

' Model: MS Access 2000-2003

' Database: MS Access 2000-2003

'=======================================================

'=== MS Access 2000/2002/2003 database creation method

'===

'=== 1. Create a new database in the MS Access

'=== 2. Create a new module

'=== 3. Copy the TDM3 output SQL script into the new MS Access module

'=== 4. Select from main menu "Tools" item "References..." and check

'=== the "Microsoft ActiveX Data Objects 2.x Library"

'=== and "Microsoft ADO Ext. 2.x for DDL and Security"

'=== and "Microsoft DAO 3.6 Object Library"

'=== 5. Place your mouse cursor somewhere in the main procedure Main()

'=== 6. Run the module code (Click the "Run Sub/UserForm" button or press F5)

'=======================================================

Public con As New ADODB.Connection

Public cat As New ADOX.Catalog

Public tbl As ADOX.Table

Public idx As ADOX.Index

Public dbs As DAO.Database

Sub Main()

Set con = CurrentProject.Connection

cat.ActiveConnection = con

Set dbs = CurrentDb()

On Error GoTo ErrorHandler

Call CreateTables

Call CreatePrimaryKeys

Call CreateIndexes

Call CreateAlterKeys

Call CreateRelations

Call CreateRelationsDAO

Call CreateQueries

MsgBox "Script successfully processed.", vbInformation

Exit Sub

ErrorHandler:

Select Case Err.Number

Case -2147217857 'DAO: 3010

MsgBox "Table " & tbl.Name & " already exist!", vbInformation

Err.Clear

Case -2147217868 'DAO: 3284

MsgBox "Index " & idx.Name & " for table " & tbl.Name & " already exist!", vbInformation

Err.Clear

Case Else

MsgBox Err.Description, vbCritical

End Select

End Sub

' Create tables

'===============

Sub CreateTables()

Call CreateTable1 'Student

Call CreateTable2 'Ocenki

Call CreateTable3 'FCLT

Call CreateTable4 'SPECT

Call CreateTable5 'Entity5

End Sub

'=== Create table Student ========

Sub CreateTable1()

Set tbl = New ADOX.Table

tbl.Name = "Student"

cat.Tables.Append tbl

Call AddFieldToTable("Student", "NZ", adVarWChar, 7, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("Student", "N_fclt", adNumeric, 2, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("Student", "N_spect", adNumeric, 2, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("Student", "FIO", adVarWChar, 45, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Student", "Date_p", adDate, 0, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Student", "kurs", adNumeric, 1, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Student", "N_grup", adVarWChar, 10, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Student", "N_pasp", adVarWChar, 10, 0, "", "TRUE", "", "", "", "", "")

dbs.TableDefs.Refresh

Call AddPropertyToFieldDAO( "Student","NZ","Caption","Номер зачетки",dbText)

Call AddPropertyToFieldDAO( "Student","N_fclt","Caption","Номер факультета",dbText)

Call AddPropertyToFieldDAO( "Student","N_spect","Caption","№ специальности",dbText)

Call AddPropertyToFieldDAO( "Student","FIO","Caption","ФИО",dbText)

Call AddPropertyToFieldDAO( "Student","Date_p","Caption","Дата поступления",dbText)

Call AddPropertyToFieldDAO( "Student","kurs","Caption","Курс",dbText)

Call AddPropertyToFieldDAO( "Student","N_grup","Caption","Номер группы",dbText)

Call AddPropertyToFieldDAO( "Student","N_pasp","Caption","Номер паспорта",dbText)

End Sub

'=== Create table Ocenki ========

Sub CreateTable2()

Set tbl = New ADOX.Table

tbl.Name = "Ocenki"

cat.Tables.Append tbl

Call AddFieldToTable("Ocenki", "NZ", adVarWChar, 7, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("Ocenki", "N_predm", adNumeric, 2, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("Ocenki", "N_sem", adNumeric, 2, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Ocenki", "osenka", adVarWChar, 1, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Ocenki", "Date_pol", adDate, 0, 0, "", "TRUE", "", "", "", "", "")

Call AddFieldToTable("Ocenki", "F_prep", adSmallInt, 0, 0, "", "TRUE", "", "", "", "", "")

dbs.TableDefs.Refresh

Call AddPropertyToFieldDAO( "Ocenki","NZ","Caption","Номер зачетки",dbText)

Call AddPropertyToFieldDAO( "Ocenki","N_predm","Caption","№ предмета",dbText)

Call AddPropertyToFieldDAO( "Ocenki","N_sem","Caption","Номер семестра",dbText)

Call AddPropertyToFieldDAO( "Ocenki","osenka","Caption","оценка",dbText)

Call AddPropertyToFieldDAO( "Ocenki","Date_pol","Caption","Дата получения оценки",dbText)

Call AddPropertyToFieldDAO( "Ocenki","F_prep","Caption","Фамилия преподователя",dbText)

End Sub

'=== Create table FCLT ========

Sub CreateTable3()

Set tbl = New ADOX.Table

tbl.Name = "FCLT"

cat.Tables.Append tbl

Call AddFieldToTable("FCLT", "N_fclt", adNumeric, 2, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("FCLT", "Nazv_fclt", adVarWChar, 50, 0, "", "TRUE", "", "", "", "", "")

dbs.TableDefs.Refresh

Call AddPropertyToFieldDAO( "FCLT","N_fclt","Caption","Номер факультета",dbText)

Call AddPropertyToFieldDAO( "FCLT","Nazv_fclt","Caption","Название факультета",dbText)

End Sub

'=== Create table SPECT ========

Sub CreateTable4()

Set tbl = New ADOX.Table

tbl.Name = "SPECT"

cat.Tables.Append tbl

Call AddFieldToTable("SPECT", "N_spect", adNumeric, 2, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("SPECT", "Nazv_spect", adVarWChar, 50, 0, "", "TRUE", "", "", "", "", "")

dbs.TableDefs.Refresh

Call AddPropertyToFieldDAO( "SPECT","N_spect","Caption","№ специальности",dbText)

Call AddPropertyToFieldDAO( "SPECT","Nazv_spect","Caption","Название специальности",dbText)

End Sub

'=== Create table Entity5 ========

Sub CreateTable5()

Set tbl = New ADOX.Table

tbl.Name = "Entity5"

cat.Tables.Append tbl

Call AddFieldToTable("Entity5", "N_predm", adNumeric, 2, 0, "", "FALSE", "", "", "", "", "")

Call AddFieldToTable("Entity5", "Predmet", adNumeric, 2, 0, "", "TRUE", "", "", "", "", "")

dbs.TableDefs.Refresh

Call AddPropertyToFieldDAO( "Entity5","N_predm","Caption","№ предмета",dbText)

Call AddPropertyToFieldDAO( "Entity5","Predmet","Caption","Предмет",dbText)

End Sub

' Create primary keys

'=====================

Sub CreatePrimaryKeys()

'=== Create primary key for table Student ======

Set idx = New ADOX.Index

Set tbl = cat.Tables("Student")

idx.Name = "Key1"

idx.PrimaryKey = True

idx.Unique = True

idx.IndexNulls = adIndexNullsDisallow

Call AddFieldToIndex(idx, "NZ", False )

tbl.Indexes.Append idx

'=== Create primary key for table FCLT ======

Set idx = New ADOX.Index

Set tbl = cat.Tables("FCLT")

idx.Name = "Key3"

idx.PrimaryKey = True

idx.Unique = True

idx.IndexNulls = adIndexNullsDisallow

Call AddFieldToIndex(idx, "N_fclt", False )

tbl.Indexes.Append idx

'=== Create primary key for table SPECT ======

Set idx = New ADOX.Index

Set tbl = cat.Tables("SPECT")

idx.Name = "Key4"

idx.PrimaryKey = True

idx.Unique = True

idx.IndexNulls = adIndexNullsDisallow

Call AddFieldToIndex(idx, "N_spect", False )

tbl.Indexes.Append idx

'=== Create primary key for table Entity5 ======

Set idx = New ADOX.Index

Set tbl = cat.Tables("Entity5")

idx.Name = "Key5"

idx.PrimaryKey = True

idx.Unique = True

idx.IndexNulls = adIndexNullsDisallow

Call AddFieldToIndex(idx, "N_predm", False )

tbl.Indexes.Append idx

End Sub

' Create indexes

'================

Sub CreateIndexes()

End Sub

' Create alternate keys (unique indexes in MS ACCESS)

'================================================

Sub CreateAlterKeys()

End Sub

' Create relations

'==================

Sub CreateRelations()

Dim keyFk As ADOX.Key

'=== Create relationship between parent table FCLT and child table Student ======

Set keyFk = New ADOX.Key

Set tbl = cat.Tables("Student")

keyFk.Name = "Связь 3"

keyFk.Type = adKeyForeign

keyFk.RelatedTable = "FCLT"

Call AddFieldToRelation(keyFk, "N_fclt", "N_fclt")

tbl.Keys.Append keyFk

'=== Create relationship between parent table SPECT and child table Student ======

Set keyFk = New ADOX.Key

Set tbl = cat.Tables("Student")

keyFk.Name = "Связь 2"

keyFk.Type = adKeyForeign

keyFk.RelatedTable = "SPECT"

Call AddFieldToRelation(keyFk, "N_spect", "N_spect")

tbl.Keys.Append keyFk

'=== Create relationship between parent table Student and child table Ocenki ======

Set keyFk = New ADOX.Key

Set tbl = cat.Tables("Ocenki")

keyFk.Name = "Связь1"

keyFk.Type = adKeyForeign

keyFk.RelatedTable = "Student"

Call AddFieldToRelation(keyFk, "NZ", "NZ")

tbl.Keys.Append keyFk

'=== Create relationship between parent table Entity5 and child table Ocenki ======

Set keyFk = New ADOX.Key

Set tbl = cat.Tables("Ocenki")

keyFk.Name = "Связь 4"

keyFk.Type = adKeyForeign

keyFk.RelatedTable = "Entity5"

Call AddFieldToRelation(keyFk, "N_predm", "N_predm")

tbl.Keys.Append keyFk

End Sub

' Create relations (DAO)

'========================

Sub CreateRelationsDAO()

Dim rel As DAO.Relation

dbs.Relations.Refresh

End Sub

' Create queries

'================

Sub CreateQueries()

Dim cmd As ADODB.Command

End Sub

' Add fields to table

'=====================

Sub AddFieldToTable(TableName As String, FieldName As String, _

DataType As Integer, SizePrecCol As Integer, ScaleCol As Integer, Attributes As String, _

Nullable As String, DefaultValue As Variant, _

AllowZeroLength As String, CompressUnicode As String, _

ValText As String, ValRule As String)

Dim col As New ADOX.Column

col.ParentCatalog = cat

col.Name = FieldName

col.Type = DataType

If DataType = adVarWChar Then col.DefinedSize = SizePrecCol

If DataType = adNumeric Then

col.Precision = SizePrecCol

col.NumericScale = ScaleCol

End If

If Nullable <> "" Then col.Properties("Nullable").Value = CBool(Nullable)

If Attributes <> "" Then col.Properties(Attributes).Value = True

If AllowZeroLength <> "" Then col.Properties("Jet OLEDB:Allow Zero Length").Value = CBool(AllowZeroLength)

If CompressUnicode <> "" Then col.Properties("Jet OLEDB:Compressed UNICODE Strings").Value = CBool(CompressUnicode)

If DefaultValue <> "" Then col.Properties("Default").Value = DefaultValue

If ValRule <> "" Then col.Properties("Jet OLEDB:Column Validation Rule").Value = ValRule

If ValText <> "" Then col.Properties("Jet OLEDB:Column Validation Text").Value = ValText

cat.Tables(TableName).Columns.Append col

End Sub

' Add DAO properties to table

'=============================

Sub AddPropertyToTableDAO( TableName As String, PropertyName As String, Value As Variant, DataType As String)

Dim prp As DAO.Property

Dim tdf As DAO.TableDef

Set tdf = dbs.TableDefs(TableName)

Set prp = tdf.CreateProperty(PropertyName, DataType, Value)

tdf.Properties.Append prp

End Sub

' Add DAO properties to field

'=============================

Sub AddPropertyToFieldDAO( TableName As String, FieldName As String, PropertyName As String, Value As Variant, DataType As String)

Dim prp As DAO.Property

Dim fld As DAO.Field

Dim tdf As DAO.TableDef

Set tdf = dbs.TableDefs(TableName)

Set fld = tdf.Fields( FieldName )

Set prp = fld.CreateProperty(PropertyName, DataType, Value)

fld.Properties.Append prp

End Sub

' Add fields to index

'=====================

Sub AddFieldToIndex(idx As ADOX.Index, FieldName As String, Descending As Boolean )

idx.Columns.Append FieldName

If Descending = True Then idx.Columns(FieldName).SortOrder = adSortDescending

End Sub

' Add fields to relation

'========================

Sub AddFieldToRelation(keyFk As ADOX.Key, PKField As String, FKField As String )

keyFk.Columns.Append FKField

keyFk.Columns(FKField).RelatedColumn = PKField

End Sub

' Add fields to relation (DAO)

'=============================

Sub AddFieldToRelationDAO( rel As DAO.Relation, PKField As String, FKField As String )

Dim fld As DAO.Field

Set fld = rel.CreateField( PKField )

fld.ForeignName = FKField

rel.Fields.Append fld

End Sub

После конвертирования

/*

Created: 11.04.2014

Modified: 11.04.2014

Model: MS Access 2000-2003

Database: MS SQL Server 2005

*/

-- Create tables section -------------------------------------------------

-- Table Student

CREATE TABLE [Student]

(

[NZ] Char(7) NOT NULL,

[N_fclt] Decimal(2,0) NOT NULL,

[N_spect] Decimal(2,0) NOT NULL,

[FIO] Char(45) NULL,

[Date_p] Datetime NULL,

[kurs] Decimal(1,0) NULL,

[N_grup] Char(10) NULL,

[N_pasp] Char(10) NULL

)

go

-- Add keys for table Student

ALTER TABLE [Student] ADD CONSTRAINT [Key1] PRIMARY KEY ([NZ])

go

-- Table Ocenki

CREATE TABLE [Ocenki]

(

[NZ] Char(7) NOT NULL,

[N_predm] Decimal(2,0) NOT NULL,

[N_sem] Decimal(2,0) NULL,

[osenka] Char(1) NULL,

[Date_pol] Datetime NULL,

[F_prep] Smallint NULL

)

go

-- Table FCLT

CREATE TABLE [FCLT]

(

[N_fclt] Decimal(2,0) NOT NULL,

[Nazv_fclt] Char(50) NULL

)

go

-- Add keys for table FCLT

ALTER TABLE [FCLT] ADD CONSTRAINT [Key3] PRIMARY KEY ([N_fclt])

go

-- Table SPECT

CREATE TABLE [SPECT]

(

[N_spect] Decimal(2,0) NOT NULL,

[Nazv_spect] Char(50) NULL

)

go

-- Add keys for table SPECT

ALTER TABLE [SPECT] ADD CONSTRAINT [Key4] PRIMARY KEY ([N_spect])

go

-- Table Entity5

CREATE TABLE [Entity5]

(

[N_predm] Decimal(2,0) NOT NULL,

[Predmet] Decimal(2,0) NULL

)

go

-- Add keys for table Entity5

ALTER TABLE [Entity5] ADD CONSTRAINT [Key5] PRIMARY KEY ([N_predm])

go

-- Create relationships section -------------------------------------------------

ALTER TABLE [Student] ADD CONSTRAINT [Связь 3] FOREIGN KEY ([N_fclt]) REFERENCES [FCLT] ([N_fclt])

go

ALTER TABLE [Student] ADD CONSTRAINT [Связь 2] FOREIGN KEY ([N_spect]) REFERENCES [SPECT] ([N_spect])

go

ALTER TABLE [Ocenki] ADD CONSTRAINT [Связь1] FOREIGN KEY ([NZ]) REFERENCES [Student] ([NZ])

go

ALTER TABLE [Ocenki] ADD CONSTRAINT [Связь 4] FOREIGN KEY ([N_predm]) REFERENCES [Entity5] ([N_predm])

Go

Соседние файлы в папке 3 курс Разработка управленческих решений (лабы)