在访问和关系中创建的数据库表将在其他地方创建?

时间:2017-12-11 15:03:04

标签: sql database ms-access relationship database-normalization

我目前正在开发一个项目,该项目有许多没有关系的表。我想知道是否有可能首先创建表,然后创建关系,例如通过C#langauage或外部ms访问(甚至可能吗?)

我了解正常化。然而,由于我没有设法在谷歌上找到答案,我想问这个问题,我开始规范化过程,然后发现关系已经通过另一种方法完成了。

谢谢

1 个答案:

答案 0 :(得分:1)

我会像Erik建议的那样使用 DAO 。虽然我没有代码可以从C#运行它,但这里的VBA示例应该演示所需的步骤:

' Creates and appends missing relations between the local tables.
' Note, that this will create a hidden index on the foreign table field.
' Returns True if success, False if not.
'
' 2017-11-14. Gustav Brock. Cactus Data ApS, CPH.
'
Public Function CreateLocalDataTableRelations() As Boolean

    Dim Database        As DAO.Database
    Dim Field           As DAO.Field
    Dim Relation        As DAO.Relation
    Dim Table           As DAO.TableDef
    Dim ForeignTable    As DAO.TableDef

    Dim RelationName    As String
    Dim Result          As Boolean

    Set Database = CurrentDb

    Set Table = Database.TableDefs("Country")
    Set ForeignTable = Database.TableDefs("Zone")
    RelationName = Table.Name & "_" & ForeignTable.Name
    If Not IsTableRelation(RelationName) Then
        ' Create and append relation RelationName.
            Set Relation = Database.CreateRelation(RelationName)
            Relation.Table = Table.Name
            Relation.ForeignTable = ForeignTable.Name
            Relation.Attributes = dbRelationUpdateCascade
                Set Field = Relation.CreateField("Code")
                Field.ForeignName = "CountryCode"
            Relation.Fields.Append Field
        Database.Relations.Append Relation
    End If

    Set Table = Database.TableDefs("Zone")
    Set ForeignTable = Database.TableDefs("Timezone")
    RelationName = Table.Name & "_" & ForeignTable.Name
    If Not IsTableRelation(RelationName) Then
        ' Create and append relation RelationName.
            Set Relation = Database.CreateRelation(RelationName)
            Relation.Table = Table.Name
            Relation.ForeignTable = ForeignTable.Name
            Relation.Attributes = dbRelationUpdateCascade
                Set Field = Relation.CreateField("ZoneId")
                Field.ForeignName = "ZoneId"
            Relation.Fields.Append Field
        Database.Relations.Append Relation
    End If

    Result = (Err.Number = ErrorNone)

    CreateLocalDataTableRelations = Result

End Function

和辅助函数:

' Checks if a relation named RelationName exists.
' Returns True if it is found, False if not.
'
' 2017-11-14. Gustav Brock. Cactus Data ApS, CPH.
'
Public Function IsTableRelation( _
    ByVal RelationName As String) _
    As Boolean

    Dim Relation    As DAO.Relation

    Dim Result      As Boolean

    For Each Relation In CurrentDb.Relations
        If Relation.Name = RelationName Then
            Exit For
        End If
    Next
    Result = Not (Relation Is Nothing)

    IsTableRelation = Result

End Function
相关问题