如何设计这样的表?

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
需求清作如下设想
模拟一个订票系统
有两个表,一个代表票的内容,包括出发时间,航班号,等等
另外一个代表乘客的内容,包括姓名,性别,是否小孩,护照号码等等。
原来的设计是一张票作为一个记录,这样这两个表实际上是一张表
但后来发现忽略了团体票的概念,每一条记录除了乘客的内容不一样外,票的内容完全一样。
于是为了便于统计,避免冗余,想把乘客和票分开,现在的问题是不知道他们之间如何联系?
1。我在票的表里面加了一个属性:枚数,表示这张票一共多少枚,也即有多少乘客表里面的记录跟他有关系。
2。但是在乘客表里面我怎么添加属性跟票关联?一个乘客可能不止一次在我这里订票,我怎样设计属性,效率比较高?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
票的记录,有一编号(主键),和数量及其他信息
乘客里面除了基本信息,有票的编号
一票对多个乘客
事实上也允许一个乘客有多种(张)票
如果一个乘客在一个编号票里面只能有一张,则是联合主键
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
是不是得这样,乘客表里面一个乘客只能对应一张票(多张票我无法实现。。。。因为你也不知道具体有多少张,我怎么设计项目来保存票号呢?),但是乘客表就出现冗余了,。。。。。那么跟做成一个大表也没什么区别了。。。。。郁闷阿。。。。。水平太菜。。。。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
如果你定义这样的表:
CREATE OR REPLACE TABLE TKT(
TICKET_TYPE VARCHAR2(2),
...
PRIMARY KEY(TICKET_TYPE)
);
--票的表,注意票类别为主键
CREATE OR REPLACE TABLE PSL(
NAME VARCHAR2(8),
TICKET_NUM VARCHAR2(10),
...
TICKET_TYPE VARCHAR2(2),
PRIMARY KEY(TICKET_NUM),
FOREIGN KEY(TICKET_TYPE) REFERENCES TKT);
--人的表,注意票号为主键,票类别为外键

这样应该可以满足你的要求,而且也满足3NF,你还可以自己
定义一些约束或级联。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
那你干脆这样好了
乘客信息表
票信息表
乘客与票的关联信息表(乘客编号、票编号、张数)
这样应该能满足你的需求
通常的设计,也基本是这样做的
注意建好索引就ok了
只有在数据量都很大的情况下,考虑合并表通过冗余来避免表连接
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我感觉没有必要创建乘客和票的关系表,因为同一个乘客定相同票的张数完全可以放在乘客表中,没有必要单独列出一个表占用表空间。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
乘客信息表
票信息表
乘客与票的关联信息表(乘客编号、票编号、张数)
----------------------
这好像不对?乘客可以有好几张票,但不应该是一样的。也就是说对于一个乘客来说,如果有多数张票,那么票编号肯定不一样,而张数最多为1。他不可能有两张一样的票。而只可能有不同时间,或者不同地点的票。
所以关联表似乎没有存在的必要,把关联信息加到乘客表里面。。。。。?有冗余了。。。(汗。。。)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
关联表中不要张数就ok了

回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
如果有必要,可以这样建立关系,
创建三个关系表;
乘客表(姓名,身份号,国籍,...,票种类,票号);
主键:身份号;外键:票号,票种类
票表(票号,票种类);
主键:票号;外键:票种类
票类表(票种类,航班号,起飞时间,...)
主键:票种类
其中,乘客表与票表是1对1关系;
票表与票种类是多对1关系;
乘客与票种类也是多对1关系.
这样应该解决了乘客和票种类之间的多对多关系的!
观点供参考,意见可交流


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
票表 (票编号,票种类号)
票种类表(票种类号,时间、航班等)

关系表(乘客编号、票编号、团体编号):
乘客编号+票编号 唯一
团体编号可为null
这样在关系表中知道团体与乘客的关系
如果团体信息需要记录可再增加一表,否则只要编号也就够了
个人以为,满足需求应该是够了
楼上的问题没有考虑到一个乘客可能买不同种类票
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行