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

Sql 如何为具有多个名称的实体设计实体表,sql,sql-server,database-design,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 ,Cu

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

对表格的最初看法如下所示:

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)    
不过,客户的名称是客户实体的一部分,我觉得它属于客户表。 对于这种情况有更好的设计吗


谢谢你

就我个人而言,我会将主要名称保留在
客户
表中,并创建一个与
客户
具有零对多关系的“备选名称”表


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

不幸的是,这太长了,无法发表评论

在弄清楚这一点之前,需要更多的信息

  • 姓名是否需要其他信息?例如,语言、标题或创建日期
  • 名字是唯一的吗?唯一性是在客户内部还是在所有名称中
  • 主要名称是否唯一
  • 是否每个客户都必须有一个主名称
  • 主名称更改为备用名称的频率是多少?(而不仅仅是更新名称。)
  • 查询数据时,您是否知道该名称是主名称还是备用名称?(或者它们都需要比较吗?)
  • 根据这个问题的答案,适当的数据结构可能会有一些微妙的差别。例如,如果您有一个标识主名称的标志,那么要确保只有一行设置了此值可能会比较困难,尤其是在更新行时


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

    客户可以有多个备选名称,还是只有一个?如果有多个表,则需要第二个表(特别是如果“many”是不可量化的数字),如果只有一个表,则可以使用单个表(将其主名称和备用名称作为单独的列)。而不是在
    CustomerName
    表中使用标志(这会带来自身的维护问题),您可以将主名称存储在
    Customer
    表中,作为
    CustomerName
    表的FK。最好将主名称保留在
    Customer
    表中。这个名称总是一个,不是吗?@Larnu,它可以有多个备选名称。@DenisRubashkin,我可以把它放在Customer表中,但我有两个备选名称:将它保存在CustomerName中——在这种情况下,我必须将它保存在两个位置,或者只保存在Customer中——在本例中,如果需要查找客户的姓名列表,我需要查询这两个表。不确定哪种解决方案最好谢谢!备用名称用于某些检查活动,但在显示所有名称时,我也需要主名称。以下是答案:1。不,这个名字够了。是的,名称是唯一的3。是的4。是的,它必须有一个主名称5。不经常,但您可以让客户使用3,4个备选名称。如果标识了新名称,则该名称必须存在于备用名称中。它不应该在任何地方更新。6.主名称将与客户一起显示。用户将在应用程序中使用备用名称来检查不同的内容,因此他们需要完整的客户可能名称列表。