抱歉吓到你了,但这是一个非常小的数据库设计。
当我第一次开始需要为 Web 应用程序进行数据库设计时,我找到了拐杖。幸运的是,我当年用的拐杖现在已经有了免费工具,NORMA,它适用于 Visual Studio 2008 或 2005(即将推出 2010 支持)。
我快速猜测了你的设计并得到了以下 ORM 模型:
这导致数据库有十个表,包括多对多关系所需的连接表。
NORMA 工具可以从模型为多个不同的数据库生成 DDL,还可以创建 XML 架构和 LINQ to SQL 对象。
顺便说一句,这是生成的数据库的 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
我通过查看 ORM 图来了解哪些路径是可选的 (LEFT JOIN),然后使用使用外键来帮助我构建联接的工具 (ApexSQL Edit) 创建此查询。这花了不到十分钟。