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.主名称将与客户一起显示。用户将在应用程序中使用备用名称来检查不同的内容,因此他们需要完整的客户可能名称列表。