小编Tel*_*ini的帖子

数据建模:是否总是需要使用交叉表?

考虑以下:

我有两个表(Customers和Cases)定义如下:

**Customers**
CustomerId (PK)
CustomerName
CustomerPhone

**Cases**
CaseId (PK)
CaseManager
CaseNotes
Run Code Online (Sandbox Code Playgroud)

每个客户可以拥有无​​限量的案例,但每个案例只能属于一个客户.因此,为了将表相互关联,我将使用一个交集表(CustomerCases),它分别由每个表中的外键组成.

但是,我不能只将Customers表中的CustomerID作为Cases表的外键添加吗?我觉得我错过了什么.如果我选择不使用交叉表,是否有任何陷阱我应该注意?

sql database-design data-modeling

11
推荐指数
2
解决办法
1586
查看次数

在没有第三个变量的情况下切换SQL Server中两个字段/列的值

由于导入到名为CUSTOMERS的测试表时出错,我发现自己需要在SQL Server中切换两列的值.

我错误地将LASTNAME和FIRSTNAME的相应值导入相反的字段(即客户姓氏被导入名字,反之亦然).为了解决这个问题,我在SQL Server 2008 R2中运行了以下查询,当然不希望它工作:

UPDATE CUSTOMERS
SET LASTNAME=FIRSTNAME, FIRSTNAME=LASTNAME
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,它奏效了!我所拥有的有限的编程经验(高中,一些大学课程)总是遵循这样的范例:切换两个值需要存在第三个变量来"保持"其中一个初始值的值.换句话说,我预计必须运行以下查询:

UPDATE CUSTOMERS
SET SOMEOTHERFIELD = LASTNAME
SET LASTNAME = FIRSTNAME
SET FIRSTNAME = SOMEOTHERFIELD
Run Code Online (Sandbox Code Playgroud)

这种行为只出现在SQL Server 2008 R2中,还是代表了我缺少的关系理论的其他一些基本方面?

sql sql-server relational-database sql-server-2008

9
推荐指数
1
解决办法
4590
查看次数

使用SQL DataReader捕获插入或删除的值

我正在从.net应用程序调用存储过程,该过程将记录插入数据库.但是,我需要获取我刚刚成功插入的记录列表.

我知道我可以直接从存储过程返回插入的行,但我希望有一种方法可以在C#中以编程方式执行此操作.

是否可以实现SQLDataReader类以实现此功能,即从插入/删除的表中读取?或者是否有其他类可以容纳此请求?

.net c# sql stored-procedures sqldatareader

7
推荐指数
1
解决办法
999
查看次数

C#控制台应用程序响应HTTP POST请求

是否可以在C#控制台应用程序中响应HTTP POST请求?如果是这样,怎么样?我认为它可能涉及使用套接字(我对此知之甚少).任何帮助将不胜感激!

.net c# sockets post http

3
推荐指数
1
解决办法
4396
查看次数

3路SQL加入返回错误数据

我正在尝试使用以下sql来检索收到的总金额,以及从3个表中销售的总金额:

select ITEMS.ITEM_NO, SUM(RECEIVINGS.QTY_RECVD), SUM(SALES.QTY_SOLD)
from ITEMS
left join RECEIVINGS
on ITEMS.ITEM_NO = RECEVINGS.ITEM_NO
left join SALES
on ITEMS.ITEM_NO = SALES.ITEM_NO
WHERE ITEMS.ITEM_NO = '12345'
GROUP BY ITEMS.ITEM_NO
Run Code Online (Sandbox Code Playgroud)

上面的查询返回的数据比实际值大几个数量级.但是,如果我把它分成两个查询:

select ITEMS.ITEM_NO, SUM(RECEIVINGS.QTY_RECVD)
from ITEMS
left join RECEIVINGS
on ITEMS.ITEM_NO = RECEVINGS.ITEM_NO
WHERE ITEMS.ITEM_NO = '12345'
GROUP BY ITEMS.ITEM_NO


select ITEMS.ITEM_NO, SUM(SALES.QTY_SOLD)
from ITEMS
left join SALES
on ITEMS.ITEM_NO = SALES.ITEM_NO
WHERE ITEMS.ITEM_NO = '12345'
GROUP BY ITEMS.ITEM_NO
Run Code Online (Sandbox Code Playgroud)

它完美地运作.是什么赋予了?是否有任何原因加入所有三个表的第一个查询将无法工作,但两个单独的查询将?

sql t-sql join

1
推荐指数
1
解决办法
116
查看次数

ISNULL/COALESCE用于多个领域

考虑以下数据模型:

顾客

CustNum | First Name | Last Name
  555        John         Doe
Run Code Online (Sandbox Code Playgroud)

CustomerAddresses

CustNum | ShippingAddress|     Line1      |  Line2  |   City  | State |  Zip    
  555   |     ADD1       |   333 A Dr.    | Apt. 10 | Dallas  |  TX   | 11345  
  555   |     ADD2       |   111 B St.    |  NULL   | Miami   |  FL   | 22222
  555   |     WXYZ       |  123 Main St.  |  NULL   | Detroit |  MI   | 99998
Run Code Online (Sandbox Code Playgroud)

OrderHeader

OrdNum | CustNum | OrderTotal |     Line1     | …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server join coalesce

1
推荐指数
1
解决办法
6103
查看次数

在记录插入方面的有效数据库访问

我为"菜鸟"问题提前道歉,但我在SQL的大多数方面仍然是一个新手.我的问题源于SQL的艺术第二章的一部分.在标题为"稳定数据库连接"的段落中,作者提到了将大量行插入数据库的几种方法.这是格式中的相应列表

Test; Results
Connect/Disconnect for each line in turn; 7.4 lines loaded per second  
Connect Once, all candidate lines individually inserted; 1,681 lines loaded per second  
Connect Once, all candidate lines inserted in arrays of 10 lines; 5,914 lines inserted per second  
Connect Once, all candidate lines inserted in arrays of of 100 lines; 9,190 lines inserted per second  

此外,作者还提到了"更快的直接加载技术".

不幸的是,我并不完全理解插入数组的想法(如果有的话).在插入数组和他引用的其他"直接加载技术"方面,有没有人可以详细说明作者所指的技术?

sql t-sql data-access-layer insert

0
推荐指数
1
解决办法
86
查看次数

查询根据两个唯一维度返回聚合?

我有以下表格,其中包含SQL Server 2008 R2中的客户和购买数据:

顾客

CustId   Last    First    Phone
   1     Doe     John    555-5555  
   2     Smith   Sally   444-4444
   3     Smith   Greg    222-1212
Run Code Online (Sandbox Code Playgroud)

Order_Header

OrderId  CustId  Date  
 1001       3   07/08/2011
 1002       2   07/19/2011
 1003       2   03/12/2012
 1004       1   03/14/2012
 1005       3   03/20/2012
 1006       1   04/17/2012
 1007       2   06/04/2012
 1008       1   08/04/2011
Run Code Online (Sandbox Code Playgroud)

ORDER_LINES

OrderId     Sequence    Item      Type    Manufacturer   Price
 1001          1        WIDGET     C         WidgCo      12.00
 1001          2        SWITCH     C        SwitchCo     10.00
 1002          1        RADIO      A        RadSupply    30.00
 1002          2        CRT        A        CRT&More     31.00 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server aggregate sql-server-2008

0
推荐指数
1
解决办法
322
查看次数