我想创建一个表结构来存储客户,但是我面临一个挑战:对于每个客户,我可以有多个名称,一个是主要名称,另一个是替代名称。
最初在桌子上的样子是这样的:
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)
尽管,客户名称是客户实体的一部分,我认为它属于客户表。 对于这种情况是否有更好的设计?
谢谢
答案 0 :(得分:1)
就我个人而言,我会将主要名称保留在Customer
表中,并创建一个与Customer
一对多关系的“ AlternateNames”表。
这是因为大概在大多数时候,当您返回客户数据时,您只会对返回主名感兴趣。想要备用名称的主要原因(如果不是唯一的话)可能是在提供备用名称后查找客户的原因。
答案 1 :(得分:0)
很遗憾,此评论太长了。
在弄清楚这个之前,需要更多信息。
根据对这个问题的答案,适当的数据结构可能会有些棘手的细微差别。例如,如果您有一个标志来标识主要名称,那么要确保仅精确地设置了该行的值就很棘手-特别是在更新行时。
注意:如果您用答案更新问题,我将删除它。