【问题标题】:How to design a mapping table?如何设计映射表?
【发布时间】:2016-09-28 07:10:20
【问题描述】:

我在这里遇到了一些设计问题。我是这方面的新手,所以我需要一些帮助。 由于公司合并,一切都必须进入其中一个系统;我应该用另一家公司的新客户 ID 映射我们的客户。

当我获得新的 customerID 时,我应该确保它是唯一的,我们现有的 customerID 也是如此。

Current customerID: CurCustID
New customer ID:    NewCustID

首先,我希望数据库确保 CurCustID 列中的每个 CurCustID 都是唯一的 - 只有一条记录,其次我希望 NewCustID 列是唯一的 - 只有一条记录。 第三,我希望 CurCustID 和 NewCustID 的行组合只接受唯一数据。

如果你能帮助我,我将非常感激,另一方面,如果我的方法是不好的做法并且有这样做的最佳做法,那么请告诉我。

USE [Database]
GO

/****** Object:  Table [dbo].[TblMapning]    Script Date: 05/30/2016 14:30:21 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[TblMapning](
[CurCustID] [varchar](255) NOT NULL,
[NewCustID] [varchar](255) NOT NULL,
PRIMARY KEY CLUSTERED 
(
[CurCustID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY =     OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

 GO

SET ANSI_PADDING OFF
GO

【问题讨论】:

  • 如果您必须合并两个客户表,我认为最好的办法是将新添加公司的客户带入您的客户表中。因为当您将新公司客户转移到现有客户时,您可能会有重复,因此您必须考虑用新 id 更新旧 id(使其唯一),但是您必须在引用此 id 的所有子表中更改此 id。
  • @Shukri Gashi。不幸的是,由于法律问题,这是不可能的:-(

标签: sql sql-server mapping


【解决方案1】:

似乎您必须创建 3 个单独的表来强制执行所有这些操作。新客户 ID 和映射表中的新客户 ID 生成方式可以根据您的内部规则自动生成,具体取决于如何分配新客户 ID。您可能希望创建代码或 SP 以使流程更加用户友好,为受骗的 oldcustids 吐出错误等,但在表级别这将是强制执行它的一种方法。

CREATE TABLE [dbo].[Tbloldcustids](
CustID [varchar](255) NOT NULL
PRIMARY KEY (CustID)
)
CREATE TABLE [dbo].[Tblnewcustids](
CustID [varchar](255) NOT NULL
PRIMARY KEY (CustID)
)
CREATE TABLE [dbo].[TblMapping](
[CurCustID] [varchar](255) NOT NULL,
[NewCustID] [varchar](255) NOT NULL
PRIMARY KEY (CurCustID,NewCustID)
)

【讨论】:

  • 这实际上是我的第一个方法。现在看来,这是解决问题的方法。有什么方法可以通过字段(如查找功能)从另一个表中进行选择?
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2012-10-01
相关资源
最近更新 更多