复杂的数据库操作

Kas*_*hef 1 c# sql asp.net webforms

我为我的ASP.NET应用程序绘制了一个非常简单的数据库设计,并且在这里和那里我设法实现了我的设计...但是我希望将数据插入到这些表中并从中检索.

替代文字

在我的应用程序中一个非常重要的功能将需要来自所有7个表的所有信息用于某个记录,有时我需要让我的应用程序接受所有类型的相关数据并将每个数据放在正确的表中

我的问题是:

  1. 拥有如此大的设计是否正常?它对于真正的应用程序来说甚至是大的吗
  2. 如果我想添加一个新的孩子,我需要在所有表中填写所有表中的相关所需信息,我将有一个大表单,其中包含一些输入以接受数据,但我将如何将它们插入到我的数据库?
  3. 如果我想选择所有的孩子,基于这种设计的选择陈述是什么?

PS:在每两个具有(M:M)关系的表之间,考虑第三个表(在该关系中将具有两个表中的每一个的两个主键).

我熟悉JOIN和一切,但从未应用过如此大的设计......帮助!提前致谢!

Joh*_*ers 6

很抱歉吓到你,但这是一个非常小的数据库设计.

当我第一次开始需要为Web应用程序进行数据库设计时,我发现了一个拐杖.幸运的是,我当时使用的拐杖现在可以在免费工具NORMA中使用,它可以与Visual Studio 2008或2005(2010支持即将推出)配合使用.

我快速猜测了你的设计并获得了以下ORM模型:

孩子和赞助商

这导致了一个包含十个表的数据库,包括多对多关系所必需的联结表.

诺玛工具可以从模型中生成DDL几个不同的数据库,也可以创建XML架构和LINQ to SQL对象.


顺便说一句,这是生成的数据库的ER图:

ER


我不明白你为什么会需要在一个单一的结果集这一切,但这里有一个查询,我认为可能返回这一切.我没有用数据测试过:

SELECT k.KidId, k.Name, k.FavoriteToy, 
    s.SponsorId, s.Name, 
    st.SponsorShipTypeCode, st.Description AS SponsortshipTypeDescription,
    fw.FieldOfWorkCode, fw.Description AS FieldOfWorkDescription,
    Skill.SkillCode, Skill.Description AS SkillDescription,
    Parent.ParentId, Parent.Name AS ParentName
FROM Kid k
LEFT OUTER JOIN KidHasParent ON KidHasParent.KidId = k.KidId
INNER JOIN Parent ON Parent.ParentId = KidHasParent.ParentId
LEFT OUTER JOIN KidHasSkill ON KidHasSkill.KidId = k.KidId
INNER JOIN Skill ON Skill.SkillCode = KidHasSkill.SkillCode
LEFT OUTER JOIN Sponsor s ON s.SponsorId = k.SponsorId
INNER JOIN SponsorIsOfSponsorShipType Sst ON Sst.SponsorId = s.SponsorId
INNER JOIN SponsorShipType st ON st.SponsorShipTypeCode = sst.SponsorShipTypeCode
LEFT OUTER JOIN SponsorParticipatesInFieldOfWork sfw ON sfw.SponsorId = s.SponsorId
INNER JOIN FieldOfWork fw ON fw.FieldOfWorkCode = sfw.FieldOfWorkCode
Run Code Online (Sandbox Code Playgroud)

我通过查看ORM图来了解哪些路径是可选的(LEFT JOIN),然后使用工具(ApexSQL Edit)来创建此查询,该工具使用外键来帮助我构建连接.这花了不到十分钟.