相关疑难解决方法(0)

我应该设计一个主键为varchar或int的表吗?

我知道这是主观的,但我想知道人们的意见,并希望在设计sql server表结构时能够应用一些最佳实践.

我个人认为在固定(最大)长度varchar上键入一个表是禁止的,因为它意味着必须在使用它作为外键的任何其他表中传播相同的固定长度.使用a int,将避免必须在整个板上应用相同的长度,这必然导致人为错误,即1个表具有varchar (10),而另一个表varchar (20).

这听起来像是最初设置的噩梦,而且意味着将来维护表格也很麻烦.例如,假设keyed varchar列突然变成12个字符而不是10个字符.你现在必须去更新所有其他表,这可能是一个巨大的任务多年.

我错了吗?我错过了什么吗?我想知道其他人对此的看法,以及坚持使用int作为主键是避免维护噩梦的最佳方法.

sql sql-server database-design

20
推荐指数
2
解决办法
1万
查看次数

主键的 INT 与 VARCHAR 数据类型

INTEGER 和 VARCHAR 数据类型中的哪一个更适合用作主键,为什么?我习惯于将主键设为整数,使用 VARCAHR 会降低性能吗?

database string varchar integer

5
推荐指数
1
解决办法
6704
查看次数

查找表或唯一约束上的 SQL 主键?

我想创建一个查找表“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 吗?或者对订单状态(唯一)创建唯一约束?谢谢。

sql sql-server sql-server-2012

5
推荐指数
1
解决办法
1692
查看次数

SQL Server规范化策略:varchar vs int Identity

我只是想知道这里的最佳解决方案是什么.

假设我有一个规范化的数据库.整个系统的主键是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)

当然,添加其他几个一对多关系.

你们都觉得怎么样?哪个更好?为什么?

sql sql-server optimization database-design normalization

2
推荐指数
3
解决办法
5797
查看次数