注册 登录
编程论坛 SQL Server论坛

关于建库的问题

scindy 发布于 2006-10-30 11:45, 495 次点击
我建了一个数据库,里边的商品分为好多大项和一些小项,我不知道怎么安排这个数据库了.比如
单反数码相机▼
佳能相机
佳能专用
佳能家用
索尼相机
索尼专用
索尼家用
民用数码相机▼
...
6 回复
#2
scindy2006-10-30 12:00
怎么没有人回啊?兄弟我还在这边等着呢,着急啊!!
#3
李彬2006-10-30 13:06
如果小项目多,可以把每个大项单独建个表!
#4
luoshun2006-10-30 14:53
我觉得为了扩展的,还是分细点的好
#5
scindy2006-10-30 14:59
对,还得扩展,怎么分细点啊?
#6
bygg2006-10-30 20:25
单反数码相机▼
民用数码相机▼ //这样的是大表,

佳能相机
索尼相机 //这样的是中表,

佳能专用
佳能家用
索尼专用
索尼家用 //这样的是小表.

再建立它们的关系就行了.
#7
ming2062006-10-31 02:49

详细具体的如下。随便用点时候弄了哈哈

--最大表
CREATE TABLE [dbo].[TABLE1] (
[ID1] [int] IDENTITY (1, 1) NOT NULL ,
[Name1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO

--中表,外键为最大表的主键

CREATE TABLE [dbo].[TABLE2] (
[ID2] [int] IDENTITY (1, 1) NOT NULL ,
[ID1] [int] NULL ,
[Name2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO

--小表,外键为中表的关键

CREATE TABLE [dbo].[TABLE3] (
[ID3] [int] IDENTITY (1, 1) NOT NULL ,
[ID2] [int] NULL ,
[Name3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO

--插入表1记录,插入记录时要触发一个事件将ID1插入表中
INSERT INTO TABLE1(Name1)values('单反数码相机')
go
INSERT INTO TABLE1(Name1)values('民用数码相机')
GO
INSERT INTO TABLE1(Name1)values('其他的类别相机')
GO
--等等,可以添加任意个,NAME1不重复记录
--测试查询

SELECT * FROM TABLE1

--插入表2记录
--注意这里的ID1必须和表一符合。例如ID1=SELECT ID1 FROM TABLE1 WHERE NAME1='单反数码相机'
--ID1在表2中是外键
INSERT INTO TABLE2(ID1,Name2)values(36,'佳能相机')
INSERT INTO TABLE2(ID1,Name2)values(37,'索尼相机')
INSERT INTO TABLE2(ID1,Name2)values(38,'其他的类别相机子类别1')
INSERT INTO TABLE2(ID1,Name2)values(38,'其他的类别相机子类别2')
--等等,可以添加任意个,NAME2不重复记录

--测试查询
select * from TABLE2--所有
--复合查询查询
select id2,ID1,NAME2 FROM TABLE2 T2
where T2.ID1 IN(SELECT ID1 FROM TABLE1 WHERE NAME1='单反数码相机')

select id2,ID1,NAME2 FROM TABLE2 T2
where T2.ID1 IN(SELECT ID1 FROM TABLE1 WHERE NAME1='民用数码相机')

select id2,ID1,NAME2 FROM TABLE2 T2
where T2.ID1 IN(SELECT ID1 FROM TABLE1 WHERE NAME1='其他的类别相机')

--插入第三个表,同样将ID2作为表中的外键,在TABLE2中必须存在,否则数据库不完整
INSERT INTO TABLE3(ID2,Name3)values(16,'佳能专用')
INSERT INTO TABLE3(ID2,Name3)values(16,'佳能家用')
--插入其他
select * from TABLE3--所有

--复合查询查询,某个子类下的所有
select * from TABLE3
where id2 in(
select id2
from table2
where id1 in(
select id1 from table1 where Name1='单反数码相机'
)
)
--单条记录
select * from TABLE3
where id2 in(
select id2
from table2
where id1 in(
select id1 from table1 where Name1='单反数码相机'
)
)
and id3=1
/*
delete from table1
delete from table2
delete from table3
*/


我上边几个简单的SQL语句仅是测试,操作表更好的做法需要做视图,存储过程等。

1