建材秒知道
登录
建材号 > 设计 > 正文

关于数据库设计,为什么采取主从表结构

孤独的牛排
粗犷的黄蜂
2023-02-28 15:26:17

关于数据库设计,为什么采取主从表结构?

最佳答案
独特的画板
炙热的小蜜蜂
2025-06-24 21:12:11

就拿你所例举的例子来说,一张入库单可能对用多个物料,如果不是采用主从表的形式,那么你的主表的数据就会有大量的重复。通常有多少物料就会重复多少次。这对系统的资源是很大的浪费。其实这种情况在数据库基础的知识学习当中是有专门的范式约束,可以避免的。 主从表的关联,一般是在从表中添加一个主表的主键字段作为从表的外键,比如入库单号。这样主从表就可以建立一对多的对应关系了。

最新回答
哭泣的大象
甜美的糖豆
2025-06-24 21:12:11

完全可以不需要的。

之所以搞出个主从表,是为了加快数据的查询,减少数据的冗余。

表与表的联系是通过外码进行的。

你要是搞个小型数据库可以只用一个表。但是字段要是多了,你会发现很难管理或者冗余过大。

按照数据库设计理论,只要符合3NF的就已经很好了。多数人设计成一个表,很大程度上不可能称为3NF,所以要进行分解。

勤劳的酒窝
踏实的眼神
2025-06-24 21:12:11
要创建fastreport的主从报表,需要建立两个数据集。一个是主表的数据集,另外一个是一个明细表的数据集;首先,运行报表设计器,创建一个空白报表。为了添加一个明细的数据集,需要调用 "Configure Bands" 窗口。点击 "Configure Bands" 按钮便可实现调用,也可以通过"Report|Configure Bands..." 菜单项来调用"Configure Bands"窗口。选择"Data" 数据集,如图所示,单击鼠标右键以显示上下文菜单,并选择”data“band,接下来,嵌套数据便被添加到所选择的数据集中。按“close”按钮关闭窗口。可能方法不是很全,但是强烈建议题主试试finereport,我用过的报表中最好的了,操作方便又简洁,官网论坛解答也快,最适合中国复杂式报表,希望对题主有帮助。

机智的香菇
醉熏的网络
2025-06-24 21:12:11
比如 有userInfo 和bookInfo 两张表

select * from userInfo inner join bookInfo on

userInfo.id=bookInfo.id

where userInfo.id between (PageNum-1)*PageSize and ((PageNum-1)*PageSize)+PageSize)

PageNum 用户翻到的当前页

PageSize 每页的最大行数

(PageNum-1)*PageSize 一个算法,只是算出当前页的第一条数据

((PageNum-1)*PageSize)+PageSize) 算出当前页的最后一条数据

最好的办法是 用 RowNumber在数据库里分页

如果是对Gridview 的数据源 dataset分页也可以(不过这样不科学。。。)

int beginPage=(PageNum-1)*PageSize //翻页后的第一条数据

int endPage=((PageNum-1)*PageSize)+PageSize) //翻页后的最后一条数据

for(int i=beginPagei<endPagei++)

{

赋值给一个新的dataset

}

然后把新的dataset交给 Gridview

狂野的乌冬面
唠叨的小海豚
2025-06-24 21:12:11
不能断定。主从表关系:从表数据依赖于主表,一般最后查询数据时把主表与从表进行关联查询。主表可用于存储主要信息,从表用来存储客户扩展信息。只能说这两张表通过主外键相关联,比如学生和教师两张表,教师的主键可以放到学生这张表中作为外键,但学生这张表的信息并不是教师表的信息的扩展信息。只是用来说明该学生的教师的编号是多少,进而从教师这张表可以查到与之对应的教师姓名。主外键和主从表从目前看来是没有必然联系的,只能说主从表必然有主外键,而有主外键的两张表不一定为主从表。