繁体   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