请教数据库达人(Sql Server 2005)

xyjchinese 2009-10-14 06:40:43
请教数据库达人(Sql Server 2005)

数据关系如下:
有类别Category1,Category2(简称c1,c2),每个c1下都有n个c2。
c1无重复数据,c2无重复数据。
请问下面几种建表方式,您一般用哪种,为什么?

方式一:
数据表tCategory1(包含列 c1Id int,c1 nchar(10)) 。主键:c1Id自增长(1,1)。
数据表tCategory2(包含列 c2Id int,c2 nchar(10)) 。主键:c2Id自增长(1,1)。
关系表rCategory(包含列 cId int,c1Id int,c2Id int)) 。主键:cId自增长(1,1)。外键:c1Id,c2Id。
说明:如果这样建表,以后程序中就要验证rCategory表中c1Id,c2Id是否有重复。

方式二:
数据表tCategory1(包含列 c1 nchar(10)) 。主键:c1。
数据表tCategory2(包含列 c2 nchar(10)) 。主键:c2。
关系表rCategory(包含列 cId int,c1 nchar(10),c1 nchar(10))) 。主键:cId自增长(1,1)。外键:c1,c2。
说明:如果这样建表,以后程序中就要验证rCategory表中c1Id,c2Id是否有重复。

方式三:
数据表tCategory1(包含列 c1 nchar(10)) 。主键:c1。
数据表tCategory2(包含列 c2 nchar(10)) 。主键:c2。
关系表rCategory(包含列 c1 nchar(10),c1 nchar(10))) 。主键、外键:c1,c2。



...全文
108 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxmcxm 2009-10-14
  • 打赏
  • 举报
回复
常用两表就够了
数据表tCategory1(包含列 c1 nchar(10)) 。主键:c1。
数据表tCategory2(包含列 c2 nchar(10),c1 nchar(10)) 。主键:c2,c1。 外键c1

如果两表所保存的内容差不多,就用一表也行 (5楼的)
xyjchinese 2009-10-14
  • 打赏
  • 举报
回复
给个表结构啊,谢谢
SQL77 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bancxc 的回复:]
不用建关系表
[/Quote]
就直接外键关联就好了,还要关系表,呵呵,同意
bancxc 2009-10-14
  • 打赏
  • 举报
回复
不用建关系表
dawugui 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bancxc 的回复:]
感觉只需要一个表就可以了
id 自增
cid 分类id
c nchar(10)
Pid 父节点id
[/Quote]
父节点貌似都不需要,楼主自己把问题想复杂了.
xyjchinese 2009-10-14
  • 打赏
  • 举报
回复
还有楼上说没必要3个表,那请问最简介应该几个表,怎么建?
xyjchinese 2009-10-14
  • 打赏
  • 举报
回复
也就是说方式三是你们的最佳选择吗?
xyjchinese 2009-10-14
  • 打赏
  • 举报
回复
并且关系表中c1,c2两列不能重复。
--小F-- 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xyjchinese 的回复:]
c1,c2都是不为空,无重复的。
c1,c2都可以做主键。

我只是想知道你们是否总是多加一列id来当主键?
[/Quote]

没必要
xyjchinese 2009-10-14
  • 打赏
  • 举报
回复
c1,c2都是不为空,无重复的。
c1,c2都可以做主键。

我只是想知道你们是否总是多加一列id来当主键?
bancxc 2009-10-14
  • 打赏
  • 举报
回复
没必要建三个表
bancxc 2009-10-14
  • 打赏
  • 举报
回复
感觉只需要一个表就可以了
id 自增
cid 分类id
c nchar(10)
Pid 父节点id
--小F-- 2009-10-14
  • 打赏
  • 举报
回复
方式一既然c1Id自增长 就不会重复 不知道为什么还要判断重复
SQL77 2009-10-14
  • 打赏
  • 举报
回复
两个表不行吗,要关系表?
--小F-- 2009-10-14
  • 打赏
  • 举报
回复
方式一用得比较多 结构简单 关系明确
虫洞 2009-10-14
  • 打赏
  • 举报
回复
数据表tCategory1(包含列 c1Id int,c1 nchar(10)) 。主键:c1Id自增长(1,1),c1唯一。
数据表tCategory2(包含列 c2Id int,c2 nchar(10)) 。主键:c2Id自增长(1,1),c2唯一。
关系表rCategory(包含列 c1Id int,c2Id int)) 主键:c1Id,c2Id 外键:c1Id,c2Id

这样能确保c1Id,c2Id唯一

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧