簡體   English   中英

SQL數據庫關系和VB.Net應用程序

[英]SQL Database Relationships & VB.Net Application

我知道這些問題已在所有這些論壇和互聯網上被多次問及回答,但我一直在努力解決。 我在確切了解關系如何與SQL數據庫中的主鍵和外鍵一起工作時遇到了麻煩。 假設我有一個名為“ Employees”的表,主鍵名為“ employeeID”,然后另一個表名為“ Addresses”,主鍵名為“ addressID”,我將在“ Addresses”表中創建一個名為“ employeeID”的外鍵,然后創建員工表和地址表之間的關系正確嗎?

我有一個包含員工,地址,緊急聯系人等...的數據庫,可以正確地從我所閱讀和理解的地方創建這些數據庫。 因此,在使用Azure SQL DB的應用程序vb.net中,我試圖在datagridview中顯示員工及其地址。 顯而易見,datagridview一次只能顯示一個表中的信息,因此我嘗試創建一個新的數據集,該數據集將從兩個表中收集信息,並在gatagrid視圖中將其顯示為一個。 當datagrid視圖顯示此信息時,它將全部混合在一起,並且不遵守這些關系。 對於雇員表中的每個條目,它在地址表中為每個人列出三次。 在此處輸入圖片說明

這是我正在使用的數據集的代碼副本:

   Dim connectionstring As String = My.Settings.MacroQualityConnectionString
    Dim sqlemp As String = "SELECT * FROM Employee_Names, Addresses"
    Dim connection As New SqlConnection(connectionstring)
    Dim dataadapter As New SqlDataAdapter(sqlemp, connection)
    connection.Open()
    dataadapter.Fill(dsemployees, "Employee_Names")
    connection.Close()

    DataGridView1.DataSource = dsemployees.Tables(0)

我知道這可能是不正確的,但是我不確定如何使應用程序遵守數據庫中的關系? 最終,我需要能夠從多個表中收集信息,以正確顯示在datagridview中,但是不幸的是,我的SQL技能在我的其他大多數技能中還是很薄弱的! 也許我的大部分問題都回到了數據庫的設計和設置上? 每個人都非常感謝任何輸入,因為我已經為此努力了幾周! :(

謝謝大家!

您可以使用JOIN子句在查詢中顯式定義關系。 像這樣:

SELECT *
FROM Employee_Names
INNER JOIN Addresses
  ON Employee_Names.employeeID = Addresses.employeeID

這告訴查詢顯式遵循該關鍵關系(根據RDBMS可能很聰明,可以自行找出簡單的關系,但顯式使代碼更清晰)。

從結果是一組記錄的意義上說,這產生的 “一張表”。 但是,從邏輯上考慮,如果Employee_Names表中的任何給定記錄在Addresses表中具有多個相關記錄,那將意味着什么。 將它們展平為一個這樣的結果表將意味着將有重復的Employee_Names記錄。

這就是表格數據的本質。 如果單個網格顯示兩個維度的數據,則必須將它們展平,從而導致某些重復數據。

本質上,您需要問自己確切什么是DataGridView的“記錄”應代表什么。 當前,它代表Employee_NamesAddresses的唯一組合。 無論重復,它將顯示每種組合。

相反,如果您希望每個記錄代表一個唯一的Employee_Names記錄,那么您將不希望那樣在查詢中執行JOIN 相反,您將尋求使用該外鍵關系來指示父/子記錄,並將DataGridView綁定到多個表(而不是查詢結果的單個表)。

我在工具方面沒有太多經驗,但是似乎是一個合理的起點。 這樣的想法是, DataGridView將顯示Employee_Names表中的記錄,然后單擊任何給定記錄的可擴展區域將在子網格中顯示Addresses表中的關聯記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM