一张主表 多张不同结构从表?

dryZeng 2010-08-16 11:04:24
如今设计一订购系统,有一张订单主表和多张不同结构的从表,结构如下:

订单主表

订单Id 订购总金额 发票Id 订购时间 .......

从表1

标识 单价 数量 金额 其它字段11 字段12 字段13

从表2

标识 单价 数量 金额 其它字段21 字段22 字段23 字段24

发票表

发票Id 发票号

请问这样设计表合理吗?

还有,如果订购金额为0,不用打印发票,订单表的发票Id为空正常吗?

谢谢各位有心人。
...全文
128 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hao1hao2hao3 的回复:]
其他字段有涉及连接其他表的外键和收费类型不大一样,这也没关系啊!加个case when判断一下就可以了,为空不连接,否则连接

我们的CRM里面都是这样设置的,比如两个外键,分别连接A表,B表,如果数据与A关联则A有值,B为空,否则,反过来就行了,这样没影响的,不过你要分开两个表也行,你自己定吧!
[/Quote]
嗯 ,谢谢你的建议。但如果用你这样和我建两张表这样,查询的时候哪种效率更高呢?
hao1hao2hao3 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dryzeng 的回复:]
引用 6 楼 hao1hao2hao3 的回复:
如果订购金额为0,不用打印发票

--那可以让订单主表的发票id为空。

从表1和从表2的字段合并,有部分是相同的,其他没有的留空就可以了。


谢谢回复

看来,发票ID还是让其为空了,的确不影响什么。

但两从表,因为其它字段有涉及连接其它表的外键。所以按我现在的思路是不能合到一起的。因为两张从表的收费类型大不一样。
[/Quote]


其他字段有涉及连接其他表的外键和收费类型不大一样,这也没关系啊!加个case when判断一下就可以了,为空不连接,否则连接

我们的CRM里面都是这样设置的,比如两个外键,分别连接A表,B表,如果数据与A关联则A有值,B为空,否则,反过来就行了,这样没影响的,不过你要分开两个表也行,你自己定吧!
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 orchidcat 的回复:]

可见打或不打发票是通过金额来限定的。可添加计算列来判断

冗余就是空间换时间的问题。想象下如果要联合查询。100W级别的会是什么效果。1000W级别的又是什么效果....

[/Quote]

这的确是个问题。
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 csharpvb 的回复:]
那如果金额为0,不用打发票怎么办呢?一般会怎么处理呢?

我认为金额为0的话,应该就不用插入到数据库里面吧?
[/Quote]

但是要订购记录吧,不然客户要查询订购记录都没有。
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hao1hao2hao3 的回复:]
如果订购金额为0,不用打印发票

--那可以让订单主表的发票id为空。

从表1和从表2的字段合并,有部分是相同的,其他没有的留空就可以了。
[/Quote]

谢谢回复

看来,发票ID还是让其为空了,的确不影响什么。

但两从表,因为其它字段有涉及连接其它表的外键。所以按我现在的思路是不能合到一起的。因为两张从表的收费类型大不一样。
win7cc 2010-08-16
  • 打赏
  • 举报
回复
那如果金额为0,不用打发票怎么办呢?一般会怎么处理呢?

我认为金额为0的话,应该就不用插入到数据库里面吧?
Mr_Nice 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dryzeng 的回复:]

引用 2 楼 js_szy 的回复:
订单表的发票Id为空正常吗?
这肯定不行,这样以后在与主表连接的时候,没法连接

从表1
,从表2 完全可以放到一块



那如果金额为0,不用打发票怎么办呢?一般会怎么处理呢?

两张从表结构不一样,放一起会有很多冗余呢?
[/Quote]

可见打或不打发票是通过金额来限定的。可添加计算列来判断

冗余就是空间换时间的问题。想象下如果要联合查询。100W级别的会是什么效果。1000W级别的又是什么效果....
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sqlcenter 的回复:]
订单表的发票Id为空正常吗
-------
问题不大

从表1,从表2不知道你是否重复了
[/Quote]

谢谢回复,不知道关于发票Id有没有更好的解决方法。如果为空总感觉有点不合理。

两从表结构不一致,所有才用了两从表,我现在只有在程序里面处理,所以现在感觉不合理。希望大家有更好的办法。
win7cc 2010-08-16
  • 打赏
  • 举报
回复
你可以去下载一个订餐系统的数据库,ACCESS的,看看里面的表结构是怎么定义,是否还需要加强的。

hao1hao2hao3 2010-08-16
  • 打赏
  • 举报
回复
你没要求订单和发票一定要关联的,其他地方有没有这样的要求。如果没有,那可以为空。
hao1hao2hao3 2010-08-16
  • 打赏
  • 举报
回复
如果订购金额为0,不用打印发票

--那可以让订单主表的发票id为空。

从表1和从表2的字段合并,有部分是相同的,其他没有的留空就可以了。
SQLCenter 2010-08-16
  • 打赏
  • 举报
回复
起码:标识 单价 数量 金额
这几项是重复了

实在有必要分开两表,其中一表将这些共同的字段拿掉。
SQLCenter 2010-08-16
  • 打赏
  • 举报
回复
订单表的发票Id为空正常吗
-------
问题不大

从表1,从表2不知道你是否重复了
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 js_szy 的回复:]
订单表的发票Id为空正常吗?
这肯定不行,这样以后在与主表连接的时候,没法连接

从表1
,从表2 完全可以放到一块
[/Quote]


那如果金额为0,不用打发票怎么办呢?一般会怎么处理呢?

两张从表结构不一样,放一起会有很多冗余呢?
华夏小卒 2010-08-16
  • 打赏
  • 举报
回复
订单表的发票Id为空正常吗?
这肯定不行,这样以后在与主表连接的时候,没法连接

从表1
,从表2 完全可以放到一块
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
从表里忘了加外键。
dryZeng 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hao1hao2hao3 的回复:]
看你分开后是只查一张表还是两个表都要查了,如果业务情况决定了可以一次只查分开后的一张表,那当然是分开好了,这样每个表中的数据量明显比和在一起的要少,当然还要考虑实际情况建索引等。如果分开后还是两张表都要查,那么还不如直接放在一个表里面,更方便操作。
[/Quote]

实际情况是会单独查询订单主表,再根据记录ID查询从表。也会单独查询从表记录,而且频率还很高。所以还是考虑分开表存储。
感谢持续关注,回头结贴。
hao1hao2hao3 2010-08-16
  • 打赏
  • 举报
回复
看你分开后是只查一张表还是两个表都要查了,如果业务情况决定了可以一次只查分开后的一张表,那当然是分开好了,这样每个表中的数据量明显比和在一起的要少,当然还要考虑实际情况建索引等。如果分开后还是两张表都要查,那么还不如直接放在一个表里面,更方便操作。

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧