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

あなたのやり方に関する私の大きな問題は、外部キーのプロパティと操作が何であるかを私が想定しているものとそれを関連付けることができないということです。私が気に入らないもう1つの点は、テーブルに外部キーがなくてもよく、外部キーには状態と期待される動作があり、それ自体がオブジェクトであることを示唆しています。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のDeleteで、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 に答える