数据库基本概念的问题,我还没个清晰的概念
基础不扎实啊,不知道怎么办
在公司又不敢问,怕太菜被人笑话,领导又喜欢骂人小弟编程时间不长
刚来这家公司
然后就把一个ASP.NET项目交给小弟我一个人做
本人从来没有单独负责过项目
但是也只有硬着头皮上
于是需求分析文档编写画图设计数据库
开始准备用powerdesign设计数据库
但领导非要我用VISIO画,然后交给他检查
只好用VISIO画了个图,我以前也没画过,乱画完交给他
然后就是挨了几次骂,说我没把表关系反映好
最后搞了一个星期才把VISIO图画好了
然后建表,又说不准企业管理器里建,非要用脚本写,我说写就写吧
反正create table xxxx全写完了
写完后,旁边有一小子也是新来的
他做他的项目,建好表后直接在企业管理器关系图里拖关系
结果被领导看见又是一顿骂,说不能这么做
so我看见了我也没敢那么做
数据库设计完了现在已经开始在写代码了现在:问个数据库基础问题
我没在企业管理器里的关系图里拖关系
所以当对一些有关联的表进行操作的时候
我都是在存储过程里对那些有关系的表在一个事务里进行操作
我也不知道怎么形容了,举个例子吧
2个表有1对多关系,合同表,合同明细任务表
一个合同下有多个合同明细任务
我没在企业管理器里拖他们之间的关系
而是在合同明细任务表里加了个字段“合同ID”
用来反映他们的关系
要进行相关的增加,修改,删除操作的时候就在存储过程里对这两张表放在一个事务里同时进行操作
比如要删除某条合同,那该合同下的明细任务自然也要一起删掉
我就是这么写的
CREATE proc Delete_合同
(
@合同id int
)
as
declare @任务id int
set xact_abort on
begin tran
set nocount on
delete from 合同表 where 合同id = @合同id
select @任务id=任务id from 合同明细任务表 where 合同id = @合同id
delete from 合同明细任务表 where 任务id = @任务id
set nocount off
commit tran请问,这样做行吗?后期会不会出什么崩溃啊之类的问题啊?
这是标准的做法吗?
如果在那个企业管理器里拖了关系
就是想链子一样的哪个
那又该怎么做呢?
哪种方式好呢?还有什么方式可以建关系呢?菜鸟一个,谋份程序员的工不容易,希望各位高手指点!
基础不扎实啊,不知道怎么办
在公司又不敢问,怕太菜被人笑话,领导又喜欢骂人小弟编程时间不长
刚来这家公司
然后就把一个ASP.NET项目交给小弟我一个人做
本人从来没有单独负责过项目
但是也只有硬着头皮上
于是需求分析文档编写画图设计数据库
开始准备用powerdesign设计数据库
但领导非要我用VISIO画,然后交给他检查
只好用VISIO画了个图,我以前也没画过,乱画完交给他
然后就是挨了几次骂,说我没把表关系反映好
最后搞了一个星期才把VISIO图画好了
然后建表,又说不准企业管理器里建,非要用脚本写,我说写就写吧
反正create table xxxx全写完了
写完后,旁边有一小子也是新来的
他做他的项目,建好表后直接在企业管理器关系图里拖关系
结果被领导看见又是一顿骂,说不能这么做
so我看见了我也没敢那么做
数据库设计完了现在已经开始在写代码了现在:问个数据库基础问题
我没在企业管理器里的关系图里拖关系
所以当对一些有关联的表进行操作的时候
我都是在存储过程里对那些有关系的表在一个事务里进行操作
我也不知道怎么形容了,举个例子吧
2个表有1对多关系,合同表,合同明细任务表
一个合同下有多个合同明细任务
我没在企业管理器里拖他们之间的关系
而是在合同明细任务表里加了个字段“合同ID”
用来反映他们的关系
要进行相关的增加,修改,删除操作的时候就在存储过程里对这两张表放在一个事务里同时进行操作
比如要删除某条合同,那该合同下的明细任务自然也要一起删掉
我就是这么写的
CREATE proc Delete_合同
(
@合同id int
)
as
declare @任务id int
set xact_abort on
begin tran
set nocount on
delete from 合同表 where 合同id = @合同id
select @任务id=任务id from 合同明细任务表 where 合同id = @合同id
delete from 合同明细任务表 where 任务id = @任务id
set nocount off
commit tran请问,这样做行吗?后期会不会出什么崩溃啊之类的问题啊?
这是标准的做法吗?
如果在那个企业管理器里拖了关系
就是想链子一样的哪个
那又该怎么做呢?
哪种方式好呢?还有什么方式可以建关系呢?菜鸟一个,谋份程序员的工不容易,希望各位高手指点!
解决方案 »
- 请教大家 这个错误 怎么处理
- 在IE浏览器中为什么会显示出小矩形?
- 在线等!!! gridview问题!!!! 急啊!!!!b
- 急!!在线等...vs.net2003写的分层的项目,在vs.net2005里面页面层,加载不进来..
- 求教,如何在DataGrid中全选,然后一起修改
- 请问如何在.cs文件里,运行CustomValidator控件?小弟在线等!
- 如何禁止自定义控件的不自己调用子控件的render方法,而使用RenderChildren显示在指定位置?
- 在DataList里面的gridview上绑定数据
- Session or Cookie
- 提个问题:如何在普通表格中实现数据库内容的操作
- |M| 300分求:网上支付的问题 <form id="form1" runat="server"> <form id="form1" action="https://www.99bill.com/.." method="post">
- 请问SqlDataSource配置数据源能否是一个带参数的存储过程?
REFERENCES Table1 ([Id])
这个没有必要吧 直接删除id等于指定id的明细就可以吧
ALTER TABLE [dbo].[SGMRAB] ADD
CONSTRAINT [FK_SGMRAB_SGMRAA] FOREIGN KEY
(
[RAB001]
) REFERENCES [dbo].[SGMRAA] (
[RBA001
) ON DELETE CASCADE
关系看看范式的书,其实把一对一 多对多 一对 多的 关系搞清楚就可以搞定大部分了。
有时候 拘泥于范式 也不好。有一些冗余可以提高性能。
而且设计关系 其实就是为了保持数据关系的一致性和完整性。
所以不一定非要在数据库做。
有以下的办法:
1.在数据库建立数据表的约束。用存储过程和触发器维护关系和约束
2 在程序中维护。ado.net中使用事务,同样可以做到。很多的人也推崇这样做。因为这样会很灵活。有时候你会发现硬性的约束也会有问题。
3.可以通过com+的事务维持(系统级别)。 在powerdesign 画好以后 看看点击表定义中script 标签,你会发现你建立的表和关系代码都生成好了。我喜欢用powerdesign !
另,感觉你们领导也有问题。用什么工具都是次要的,完成就好!:)
但是我还是想问问,对于我目前的状况:
我现在那些表之间完全没有建立关系、
不管是企业管理器里面拖关系也好,还是脚本也好,我都没建关系
请问这样做可以吗?感觉我现在做的功能还是可以实现啊
增加,删除,修改,查询,都可以实现啊
但是我自己也不知道这样做是不是对的
就是担心怕以后数据上会出问题
顺便说下,目前我做的是个比较简单的CRM
之前那个VISIO图已经被我画的到处是关系线了,几十张表关系连的乱七八糟
一个客户表就和N张表有关系
如果我重新再去建立他们的关系的话我不知道要画多长时间我才能把头绪整理出来
现在真的痛苦的要死
天天晚上急的睡不着觉
如果你没有做关系,可能会出现很多的冗余数据
举个例子 课程是一个表 班级信息是一个表 那么必须有一个表来记录 课程和班级的关系那么课程和班级就是 多对多的关系。
如果你删除了 班级。 那么你是否要删除班级与课程的关系表中的 涉及到该班级的所有的课程呢? 当然是了。如果你只删除班级,那么就会出现垃圾数据。例
课程表
课程id 课程名字
班级表
班级id 班级名称
班级和课程关系表
班级id 课程id好好想想吧!
但是我不会出现只删除班级的情况啊
我把删除都写进存储过程里了
只要从班级表中删除班级,就把与该班级有关联的课程从课程表中也删掉
并且两个删除都写在一个TRAN里,然后COMMIT这个TRAN我就是想问问象我这样做好不好。
在页面上测试了下,反正功能上看起来貌似没什么问题
但是数据库没建立关系,都是我在存储过程里操作
实在是心里没底能留个MSN么?想向高手们好好请教请教,谢谢!
即不用写脚本Relation1 FOREIGN KEY
也不用在企业管理器里拖线
是么?
确定的话就给分,呵呵
今天早上上班一看,又有说这样控制不行
难道一定要建关系吗?
我那个表关系好象很复杂,在VISIO图里,线拖的到处都是
如果在企业管理器里拖关系,不知道要拖多少
而且领导也不准这样做
如果写脚本,那基本意味着要重新做一遍
按目前的做法,又不知道能不能保证数据完整性
现在是有人说可以,有人说不行
我是茫然的
这种字段在很多的表里面都会有所体现,这样的联系一目了然,你加上了联系反而会增加看起来的复杂度;
而且联系主要是在项目中要有所体现,数据库里面是否建立无所谓的;
我就很喜欢一个标志位加上一个连接字段和不同的表建立联系,在数据库里面是无法实现的把;
可是对设计的人来说却很好理解的阿
还有,领导还不让用baidu,只让用google,当然,我也不喜欢baidu
hy_lihuan
那么请问
象我那样操作数据,把有关系的表全放存储过程里操作
能保证数据完整性吗?
看了这么多人的回答
这个问题还是不清楚
关键是我这一个人搞一个项目,也没什么人问,只好上CSDN来请教高手
用script有很大的好处就是可以automation, repeatable, explicit 是UI无法替代的
关系表以把user表和role表的主键做外键 不过多对多关系尽可能简化成一对多的关系 其实数据库表中关系还是以一对多为主
==============================================================================
.net技术交流群 QQ8793209 欢迎职业程序员加入
关系表以把user表和role表的主键做外键 不过多对多关系尽可能简化成一对多的关系 其实数据库表中关系还是以一对多为主
那么比如这三张表我并没有在企业管理器里建关系也没在脚本里建关系
直接用存储过程进行操作
请问有问题吗?
其实你们领导让你们在脚本里写sql这样最起码能锻炼基本功啊
把数据库换成oracle mysql也是一样的做法
其实什么问题换个角度想想页就无所谓了 关系还是最好建立起来
create table students
(
stuid char(10),
stuname char(8),
sex char(2),
address varchar(40),
constraint stuidpk primary key(studid),
constraint sexck check(sex in('男','女'))
)
create table courses
(
csid char(10),
csname char(40),
credit char(4),
constraint cspk primary key(csid)
)create table grade
(
stuid char(10),
csid char(10),
grade numeric(5,2),
constraint studid_csid_pk primary key(stuid,csid),
constraint studid_fk foreign key(studid) references students(stuid),
constraint csid_fk foreign key(csid ) references courses(csid )
)