我正在为我的一个销售团队设计一个数据库。现在,目标是获取客户及其邮寄地址的主列表,但数据库最终会扩展以跟踪其他一些客户数据。所以,现在我只是在客户表上工作,但我想确保我遵循良好的规范化和效率准则,以防这件事超出了当前的预期。
目前,我们有大约 3,000 名客户。因此,我们有用于识别客户的客户代码。每个最多 20 个字符,是字母数字,并且对于每个客户始终是唯一的(Foo, Inc. 可能有 FOOINC 的客户代码,可能有 25 个子帐户,但只有一个 FOOINC 主实体。如果我们曾经与另一家名为 Foo Technologies Inc 的公司合作,我们会创建一个新代码,例如 FOOTECH 或其他东西)。
我不是 DBA,但过去设计了几个 DB,并且传统上使用 SQL 标识字段作为 PK。在这种情况下,我一直在考虑使用客户代码。这样做的利弊是什么?一方面,如果我有唯一标识符,那么使用唯一标识符作为 PK 似乎是合乎逻辑的,我就是这样做的。另一方面,我知道字符串 PK 比 int PK 慢——这个数据库肯定会增长,但它永远不会有数百万行。3,000 名客户的业务已经超过 7 年,因此我们甚至需要很长时间才能达到数万行。
我研究过这个问题,辩论通常以“这取决于数据”结束——所以请教我......在这种情况下,你在规划表格时会考虑什么?你会用什么来PK?无论如何,在那里粘贴自动递增的 INT 有什么好处?索引和插入记录有什么问题吗?
仅供参考,表格布局只需要以下内容:
-CustomerCode(nvarchar(20))
-CustomerName(nvarchar(50))
-Address1(nvarchar(50))
-Address2(nvarchar(50)) - nullable
-Address3(nvarchar(50)) - nullable
-ZipCode (nvarchar(9))
Run Code Online (Sandbox Code Playgroud)
额外的问题 - 是否值得坚持使用 3NF 并制作一个单独的表来保存城市、州、邮政编码作为 PK 并与客户表建立关系?或者不用担心 3NF 并将城市/州保留在客户表中以避免某些连接?
谢谢您的帮助!如果您需要任何其他详细信息,请告诉我。