我知道这是主观的,但我想知道人们的意见,并希望在设计sql server表结构时能够应用一些最佳实践.
我个人认为在固定(最大)长度varchar上键入一个表是禁止的,因为它意味着必须在使用它作为外键的任何其他表中传播相同的固定长度.使用a int,将避免必须在整个板上应用相同的长度,这必然导致人为错误,即1个表具有varchar (10),而另一个表varchar (20).
这听起来像是最初设置的噩梦,而且意味着将来维护表格也很麻烦.例如,假设keyed varchar列突然变成12个字符而不是10个字符.你现在必须去更新所有其他表,这可能是一个巨大的任务多年.
我错了吗?我错过了什么吗?我想知道其他人对此的看法,以及坚持使用int作为主键是避免维护噩梦的最佳方法.
INTEGER 和 VARCHAR 数据类型中的哪一个更适合用作主键,为什么?我习惯于将主键设为整数,使用 VARCAHR 会降低性能吗?
我想创建一个查找表“orderstatus”。即下面,只是为了澄清这是在数据仓库中使用的。如果需要,我将需要通过 OrderStatus 加入以检索要在其他地方使用的 INT(如果我创建了一个)。例如,就像在事实表中一样,我会将 int 存储在事实表中以链接到查找表。
+------------------------+------------------+
| OrderStatus | ConnectionStatus |
+------------------------+------------------+
| CLOSED | APPROVE |
+------------------------+------------------+
| COMPLETED | APPROVE |
+------------------------+------------------+
| FULFILLED | APPROVE |
+------------------------+------------------+
| CANCELLED | CLOSED |
+------------------------+------------------+
| DECLINED | CLOSED |
+------------------------+------------------+
| AVS_CHECK_SYSTEM_ERROR | CLOSED |
+------------------------+------------------+
Run Code Online (Sandbox Code Playgroud)
在主键/唯一键方面的最佳实践是什么?我应该创建一个 OrderStatusKey INT 作为具有身份的 PrimaryKey 吗?或者对订单状态(唯一)创建唯一约束?谢谢。
我只是想知道这里的最佳解决方案是什么.
假设我有一个规范化的数据库.整个系统的主键是varchar.我想知道的是我应该将这个varchar与一个int相关联以进行规范化还是留下它?离开作为varchar更简单,但它可能更优
比如我可以
People
======================
name varchar(10)
DoB DateTime
Height int
Phone_Number
======================
name varchar(10)
number varchar(15)
Run Code Online (Sandbox Code Playgroud)
或者我可以
People
======================
id int Identity
name varchar(10)
DoB DateTime
Height int
Phone_Number
======================
id int
number varchar(15)
Run Code Online (Sandbox Code Playgroud)
当然,添加其他几个一对多关系.
你们都觉得怎么样?哪个更好?为什么?