我有一个类似于之前讨论的要求:
我有两张桌子,[Account].[Balance]并且[Transaction].[Amount]:
CREATE TABLE Account (
AccountID INT
, Balance MONEY
);
CREATE TABLE Transaction (
TransactionID INT
, AccountID INT
, Amount MONEY
);
Run Code Online (Sandbox Code Playgroud)
当对[Transaction]表进行插入、更新或删除操作时,[Account].[Balance]应根据[Amount].
目前我有一个触发器来完成这项工作:
ALTER TRIGGER [dbo].[TransactionChanged]
ON [dbo].[Transaction]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
IF EXISTS (select 1 from [Deleted]) OR EXISTS (select 1 from [Inserted])
UPDATE [dbo].[Account]
SET
[Account].[Balance] = [Account].[Balance] +
(
Select ISNULL(Sum([Inserted].[Amount]),0)
From [Inserted]
Where [Account].[AccountID] = [Inserted].[AccountID]
)
- …Run Code Online (Sandbox Code Playgroud) 我正在设计一个 Invoice 表,并希望帮助决定几个索引和主键。
对于主键 - 使用 GUID 对我来说听起来是个好主意,但这是否意味着子表也需要有这个 GUID 作为外键?
发票总是在创建日期使用日期范围进行过滤。因此,我计划使用一个额外的 int 列而不是 datetime 列,该列仅包含诸如“20160101”之类的日期信息,因为我认为比较 int 比 datetime 快得多并且对我有益。由于创建时间会不断增加,因此我也计划在此列上应用集群索引。这是一个好主意吗?
发票也可以根据客户查询,我应该在 CustomerID 上放置另一个索引还是与日期列组合?