如何为具有多个名称的实体设计实体表

时间:2019-05-02 14:48:26

标签: sql sql-server database-design

我想创建一个表结构来存储客户,但是我面临一个挑战:对于每个客户,我可以有多个名称,一个是主要名称,另一个是替代名称。

最初在桌子上的样子是这样的:

CREATE TABLE dbo.Customer (
CustomerId INT IDENTITY(1,1) NOT NULL --PK
 -- other fields below )


CREATE TABLE dbo.CustomerName (
CustomerNameId INT IDENTITY(1,1) NOT NULL -- PK
,CustomerId INT -- FK to Customer
,CustomerName VARCHAR(30)
,IsPrimaryName BIT)    

尽管,客户名称是客户实体的一部分,我认为它属于客户表。 对于这种情况是否有更好的设计?

谢谢

2 个答案:

答案 0 :(得分:1)

就我个人而言,我会将主要名称保留在Customer表中,并创建一个与Customer一对多关系的“ AlternateNames”表。

这是因为大概在大多数时候,当您返回客户数据时,您只会对返回主名感兴趣。想要备用名称的主要原因(如果不是唯一的话)可能是在提供备用名称后查找客户的原因。

答案 1 :(得分:0)

很遗憾,此评论太长了。

在弄清楚这个之前,需要更多信息。

  1. 名称是否需要其他信息?例如,语言,标题或创建日期?
  2. 名称是否唯一?是客户内部还是所有名称上的唯一性?
  3. 主要名称是否唯一?
  4. 每个客户都必须有一个姓氏吗?
  5. 主名多久更改一次备用名? (而不是仅仅更新名称。)
  6. 查询数据时,您是否知道该名称是主要名称还是替代名称? (或者是否都需要进行比较?)

根据对这个问题的答案,适当的数据结构可能会有些棘手的细微差别。例如,如果您有一个标志来标识主要名称,那么要确保仅精确地设置了该行的值就很棘手-特别是在更新行时。

注意:如果您用答案更新问题,我将删除它。