我有一个货币交易表,其中有一个字段,用于显示向谁支付或从谁接收资金。交易使用来自纸质发票、纸质收据、互联网收据或任何其他类型的收据上交或可用的信息进行记录。
一些(许多?)公司在不同的地方为自己使用不同的名称。信用卡对帐单上显示的姓名可能与他们打印在 POS 纸质收据等上的姓名不同(略有不同)。所有不同公司的命名变体。
所以在我们的数据库中,一家公司可能有几个不同名称的交易记录。
我想要一个表单,我可以在其中输入公司的已知命名变体,并让 db 跟踪真正属于同一家公司的多个名称,以便稍后我可以查询并返回更可靠的数据。此外,我需要能够使用任何公司的“AKA”进行查询,并带回他们所有的交易,无论在输入交易时使用哪个名称。
问题是我不确定要使用的表结构。一家公司可能有 3 个或更多 AKA。我怎样才能做到这一点?
谢谢你。
在这种情况下,我将创建一个名为 CompanyAlias 的新表,其中将包含您为所有公司获得的所有可能的别名。一种可能的结构是:
公司别名:
AliasId - int - 主键 - 一些生成的 id
Alias - varchar(100) - 别名的名称
CompanyID - int - Foreign Key - 引用公司的原始表(如果您没有,我相信您应该创建一个包含所有唯一公司和您可能获得的任何其他详细信息的表)
您想要的任何其他列(描述、创建者...等)
将为给定别名的主要公司带来所有交易的查询可能如下所示:
declare @alias varchar(100);
set @alias = 'MicroS';
Select t.TransactionId, t.Alias, c.Company
from Transaction t
join CompanyAlias ca on ca.Alias = t.Alias
join Company c on c.CompanyId = ca.CompanyId
where t.Alias in
(
Select ca.Alias
from CompanyAlias ca
where ca.CompanyId =
(
Select ca.CompanyId
from CompanyAlias ca
where ca.Alias = @alias
)
);
Run Code Online (Sandbox Code Playgroud)
表的位置:
交易 - 包含货币交易(应包含客户使用的公司别名)
CompanyAlias - 之前定义的
公司 - 由您定义为拥有独特的公司及其主要详细信息
PS:如果SELECT语句太笨重(用记事本写),我想提一下我想:
获取搜索别名的 CompanyId(您在搜索表单中指定的那个)
获取提到的 CompanyId 的所有别名
获取提到的别名的所有交易