首页 新闻 会员 周边

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

0
悬赏园豆:50 [已关闭问题]

请教数据库达人(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。

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

JieNet的主页 JieNet | 初学一级 | 园豆:0
提问于:2009-10-14 18:38
< >
分享
其他回答(1)
0

建立一个自关联的表就可以了,像一棵树,而且可以无限扩展。多表维护会给业务带来麻烦。

给你一个实例:

 

CREATE TABLE [dbo].[ObjectCategory](
[C_ID] [int] IDENTITY(1,1) NOT NULL,
[C_Name] [nvarchar](50) NOT NULL,
[C_Alias] [nvarchar](50) NULL,
[C_Level] [int] NOT NULL,
[C_Code] [nvarchar](255) NULL,
[C_Parent] [int] NOT NULL,
[O_ID] [int] NOT NULL,
[O_Name] [nvarchar](20) NULL,
[O_Code] [nvarchar](255) NULL,
[UpTime] [datetime] NOT NULL,
[UpUser] [nvarchar](50) NULL,
[SortLevel] [int] NOT NULL,
[States] [smallint] NOT NULL,
[F1] [int] NOT NULL,
[F2] [int] NOT NULL,
[F3] [int] NULL,
[F4] [int] NULL,
[F5] [nvarchar](255) NULL,
[F6] [nvarchar](255) NULL,
[F7] [nvarchar](255) NULL,
CONSTRAINT [PK_OBJECTCATEGORY] PRIMARY KEY CLUSTERED
(
[C_ID] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY]

GO


其中,SortLevel负责排序,C_Code负责编码,表示ParentID的父类编码,主要是查询用的.

数据是这样的:

ID,Name,ParentID,C_Code

1,第一级分类,0,'0'

2,第一级分类,0,'0'

3,第二级分类,1,'1'

4,第三级分类,1,'1/3'

***********

邀月 | 园豆:25475 (高人七级) | 2009-10-14 19:06
0

如果你的类别只有两级的话 那就只建两个表就行了 

数据表tCategory1(包含列 c1Id int,c1 nchar(10)) 。主键:c1Id自增长(1,1)。
数据表tCategory2(包含列 c2Id int,c2 nchar(10), c1id int) 。主键:c2Id自增长(1,1),c1id  外键

如果是无限极分类的话 那就照楼上的建表吧

yeyang | 园豆:418 (菜鸟二级) | 2009-10-15 15:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册