请教下我这张表格该如何设计,或者增加什么约束条件?
各个表的关系 截图如下 http://115.com/file/be96t8it# (咱论坛啥时候能开放上传图片呢??大家辛苦下到网盘下吧,就一张图)
首先,这个数据库管理教室中的座位
其中 table表,只有一个字段,就是桌子编号,存1-95这95个编号。no自然为主键
student表记录学生信息,分别是姓名(因能保证肯定不会有重名的,所以设置主键),性别,联系方式等等
access表的4个字段是,桌子编号、姓名、预约开始日期,预约结束日期。(桌子编号和姓名共同为主键)
表与表之间的参照关系,图中可以看出
——————————————————————————————
我这个数据库的作用是:要将学生预订座位的信息记录在access表中。
但要保证:
不允许出现同一人预订一张桌子的信息出现多次(目前我这样设计,可以避免这样.因为no和name共同为主码,不允许全相同)
如
no name srart end
10 张三 2012-5-1 2012-9-1
10 张三 2012-3-2 2012-3-9
而且
不允许在access表中插入这样的非法数据(即,同一张桌子,在某一时刻被多人同时预订)
比如
no name srart end
10 张三 2012-5-1 2012-9-1
10 李四 2012-6-1 2012-6-3
但目前,我这样设计,完全没法控制这种非法情况的出现
另外,我也不知道怎么约束,结束时间必须晚于开始日期
大家可以看看如何设计这几个表,或者提供其他的解决方案也可以。多谢啦
[解决办法]
create table [table]([no] int primary key)create table student(id int primary key,name varchar(10),.....)create table access(id int foreign key references student(id),[no] int foreign key references [table]([no]),name varchar(20),srartdate datetime ,enddate datetime,--比如说要求开始时间和结束时间差必须是大于五小时constraint no_name_access primary key([no],name))--这样来吧,至于那个enddate必须大于startdate,你可以写个触发器,或者把enddate作为一个计算列