SQL。回复:内联和&外键

时间:2014-07-28 13:42:44

标签: asp.net sql join inner-join acid

美好的一天。

我有一个关于SQL和表结构的基本问题。

我们现在拥有:17张桌子。这些表包括1个管理表。其他13个表格都分为3"主要"表:客户,CareWorkers,员工。

如果我想要遵守ACID意识形态,我想创建每个都包含唯一信息的表格。

我的问题是,当我创建每一个"嵌套更深层次的"时,我试图包围我的想法。 (不知道该怎么称呼)表,我只是做一个内部连接语句来获取我的ASP.NET应用程序上的外键吗?

2 个答案:

答案 0 :(得分:1)

首先,内部联接是如何让你的表“重新组合”,而@ SpectralGhost的例子就是你如何做到这一点。但您可能需要考虑在数据库中而不是在ASP代码中执行此操作。你这样做的方式是观点。如果您创建一个视图(语法是CREATE VIEW并且有很多示例),那么您可以根据需要使数据库模式变得复杂,而不会在ASP应用程序中使用它。您甚至可以使视图可更新(您可以定义“INSTEAD OF”触发器,如果​​您搜索,还可以使用许多示例)。

但您可能不希望直接从ASP代码更新视图或表。您可能希望定义更新数据的STORED PROCEDURE,并从您的ASP代码中调用它们。这允许您将对表和视图的访问限制为只读,并强制任何写入通过您可以更好地控制的存储过程。这可以防止SQL INJECTION,使您的ASP应用程序更加安全。如果运行ASP页面的应用程序池的服务帐户可以将原始查询传递给数据库,那么任何妥协都可能对数据库造成巨大损害。如果只能执行一个可以更改参数而不是功能的存储过程,它们只能放入一些垃圾值,或者如果你检查范围很好,甚至可能不是。

最后一点建议是你没有保留“ACID”,你保留了“NORMALIZED”。这绝对是一个难以理解的概念,这是一个资源,在我开始时帮助了我很多。 http://www.marcrettig.com/data-normalization-poster/我的墙上还有一份副本。你不应该过度规范化,但你应该牢记这一点,并在合理的时候坚持下去。同样,搜索将为您提供大量资源,但基本的好处是规范化数据库对一致性问题的抵抗力更强,并且存储效率更高。而且由于磁盘IO速度很慢,因此存储效率通常也会提高查询效率。

答案 1 :(得分:0)

它们是相关的表格。您应该至少有一个带有主键的表,并且通常有几个与该表的外键相关的表。

TableOne
  TableOneID

TableTwo
  TableTwoID
  TableOneID

TableTwo通过TableOneID与TableOne相关。内部联接将根据您的联接为您提供两个表中的记录。例如:

SELECT *
FROM TableOne t1
INNER JOIN TableTwo t2 ON t1.TableOneID=t2.TableOneID

具体如何在您的应用程序中执行此操作取决于您的设计。如果您使用的是ORM,那么实际的SQL并不是非常重要。如果您正在使用存储过程,那么它就是。