数据库设计 – 多列主键?
发布时间:2020-12-12 06:39:31 所属栏目:MsSql教程 来源:网络整理
导读:例如,我有2个表,User和UserRelations,它是一对多的关系. 对于UserRelations表,我可以拥有一个标识列并使其成为主键: [RelationID] [int] IDENTITY(1,1) NOT NULL,[UserID] [int] NOT NULL,[TargetID] [int] NOT NULL, 或者我可以设计表格如下: [UserID] [in
例如,我有2个表,User和UserRelations,它是一对多的关系.
对于UserRelations表,我可以拥有一个标识列并使其成为主键: [RelationID] [int] IDENTITY(1,1) NOT NULL,[UserID] [int] NOT NULL,[TargetID] [int] NOT NULL, 或者我可以设计表格如下: [UserID] [int] NOT NULL, 并使UserID TargetID成为主键. 我的问题是每种设计的含义是什么,这对性能更好? 解决方法如果您使用以前的设计,使用多余的标识列,则不会限制插入具有相同UserID和TargetID的两行.您必须在其他两列上创建UNIQUE约束,无论如何都会创建复合索引.另一方面,一些框架(例如Rails)坚持认为每个表都有一个名为id的代理键,因此“正确”的设计可能不起作用.这取决于您使用此表设计编写的代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sqlserver2008 端口占用 8080 ReportingServicesService.ex
- SQLServer和Oracle的常用函数对比
- Sql查询将nvarchar转换为int
- user-interface – 为阿拉伯语发音者镜像_entire_用户界面有
- Sql Server:如何在WHERE子句中使用像MAX这样的聚合函数
- 当Red Gate的sql比较时,获取错误“commandtext属性尚未初始
- 在SQL中排序层级文本
- sql – 为什么子查询中的“列名无效”XYZ错误?虽然列名不在
- SQLSERVER2008 18456错误
- 了解SQLServer中varchar(max)、nvarchar(max)和varbinary(m