0

我搜索了一种模拟数据库和表之间链接的方法。

样本:

Table A
colA

Table B
colB
colD

通过链接

Table C
colA
colB

Table D
colD

这使得 TableA 通过 TableC 链接到 TableB。并且 tableD 链接到 tableB。

我认为要做的是一种链表。

有点像:

Class Table
    Private cols As List(Of Column)
End Class

Public Delegate Sub TableDelegate(ByVal tbl As Table)

Class Column
    Private name As String 'use for column name like colA,colB....

    Private fk As List(Of TableDelegate) 'linked foreign key
End Class

我从不与委托合作,我经常在指针中这样做,但我被困在 vb 中。

所以它是一个开始,如果你知道去哪里或一个完整的其他方式吗?

保护你

4

2 回答 2

0

我对你的方式的最大问题是我无法将它与我假设的外键的属性和操作联系起来。我不喜欢的另一点是表不必有外键,外键具有状态和预期行为,这表明它本身应该是一个对象。看起来你正在尝试在 VB.Net 中编写 C,但永远不会工作。

我会被诱惑

Database With a Tables Property
Table Having an Owner property of Database
Database With a ForeignKeys Property that could be accessed through owner

虽然接口不是具体的类。

例如,然后在删除 id 时,您可以执行 Owner.ForeignKeys.CascadeDelete(Me.CurrentRecord) 之类的操作

CurrentRecord 至少公开了一个列名和值列表。

作为第一次去。

请注意,在我重新发明这个轮子之前,我需要一些说服力。

例如,更容易在那里敲击 sqllite 并使用它。

于 2012-11-01T22:31:53.057 回答
0
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  'Table A'
  Dim dtbA As New DataTable("TableA")
  dtbA.Columns.Add(New DataColumn("ColA", GetType(String)))
  dtbA.PrimaryKey = {dtbA.Columns("ColA")}
  'Table B'
  Dim dtbB As New DataTable("TableB")
  dtbB.Columns.Add(New DataColumn("ColB", GetType(String)))
  dtbB.Columns.Add(New DataColumn("ColD", GetType(String)))
  dtbB.PrimaryKey = {dtbB.Columns("ColB")}
  'Table C'
  Dim dtbC As New DataTable("TableC")
  dtbC.Columns.Add(New DataColumn("ColA", GetType(String)))
  dtbC.Columns.Add(New DataColumn("ColB", GetType(String)))
  dtbC.PrimaryKey = {dtbC.Columns("ColA"), dtbC.Columns("ColB")}
  'Table D'
  Dim dtbD As New DataTable("TableD")
  dtbD.Columns.Add(New DataColumn("ColD", GetType(String)))
  'Dataset'
  Dim dst As New DataSet("MyDataset")
  dst.Tables.Add(dtbA)
  dst.Tables.Add(dtbB)
  dst.Tables.Add(dtbC)
  dst.Tables.Add(dtbD)
  dst.Relations.Add(New DataRelation("AC", dtbA.Columns("ColA"), dtbC.Columns("ColA"), True))
  dst.Relations.Add(New DataRelation("BC", dtbB.Columns("ColB"), dtbC.Columns("ColB"), True))
  dst.Relations.Add(New DataRelation("BD", dtbB.Columns("ColD"), dtbD.Columns("ColD"), True))
  'now add data'
  dst.Tables("TableA").Rows.Add("AA1")
  dst.Tables("TableA").Rows.Add("AA2")
  dst.Tables("TableA").Rows.Add("AA3")
  dst.Tables("TableB").Rows.Add("BB1", "DD1")
  dst.Tables("TableB").Rows.Add("BB2", "DD2")
  dst.Tables("TableB").Rows.Add("BB3", "DD3")
  dst.Tables("TableC").Rows.Add("AA1", "BB1")
  dst.Tables("TableC").Rows.Add("AA2", "BB2")
  dst.Tables("TableC").Rows.Add("AA3", "BB3")
  dst.Tables("TableD").Rows.Add("DD1")
  dst.Tables("TableD").Rows.Add("DD2")
  dst.Tables("TableD").Rows.Add("DD3")
  'query the data'
  Dim s As String = ""
  For Each drwA As DataRow In dst.Tables("TableA").Rows
    s &= "TableA:" & drwA("ColA").ToString & vbCrLf
    Dim drwC As DataRow = drwA.GetChildRows(dst.Relations("AC"))(0)
    s &= "--TableC:" & drwC("ColA").ToString() & drwC("ColB").ToString() & vbCrLf
    Dim drwB As DataRow = drwC.GetParentRow(dst.Relations("BC"))
    s &= "--TableB:" & drwB("ColB").ToString() & drwB("ColD").ToString() & vbCrLf
    Dim drwD As DataRow = drwB.GetChildRows(dst.Relations("BD"))(0)
    s &= "--TableD:" & drwD("ColD").ToString() & vbCrLf
  Next
  MsgBox(s)
End Sub
于 2012-11-02T02:12:16.783 回答