【问题标题】:How do you handle a child with two parent options你如何处理一个有两个父母选择的孩子
【发布时间】:2013-03-25 18:26:38
【问题描述】:

我们正在创建一个活动构建器,我正在努力寻找一种很好的方式来处理一个不同类型的父母。

我们有两个表类别和活动。 类别有 id 和 name 活动有一个 id 和 parentid

activity parentid 可以是一个类别的 id 或另一个活动的 id。 一个类别有活动,每个活动都可以有子活动。 类别仅为顶级,因此没有类别或活动有子类别

现在我有两个问题 设置表格的最佳方法是什么。 我考虑过将它们存储在单独的列中,与带有 id 和某种标志的字符串相同的列,带有 id 的列和带有父表的另一列。

我认为这些都不是很好,想知道是什么。

另一个问题是我如何拉这张桌子。我知道我可以进行多次查找,但如果有办法一次性完成所有操作,我就在徘徊。

我们使用的是 MSSQL 2012

编辑以试图澄清和添加更多信息

【问题讨论】:

  • 你能不能再描述一下,比如什么是[types categories],什么是[activities categories],什么是nameactivity],业务关系是什么,如果你给一些示例数据,那么它将帮助人们帮助您定义架构。

标签: sql sql-server


【解决方案1】:

我不喜欢 SQL 中的“重载”。换句话说,一列应该包含只意味着一件事的数据。因此,我建议使用以下数据结构。

类别 => ID |名称

活动 => ID |姓名 | CategoryId 不为空 | ParentActivityId 为空

这样,每个 Activity 都与一个 Category 相关联,并且可能与一个父 Activity 相关联。

至于“拉”?我假设您的意思是选择数据?

SELECT a.Name AS ActivityName, c.Name AS ParentName, c.Id AS ParentId
FROM Category c
JOIN Activity a
ON c.Id = a.CategoryId
WHERE a.ParentActivityId IS NULL

UNION 

SELECT a.Name AS ActivityName, c.Name AS ParentName, c.Id AS ParentId
FROM Activity c
JOIN Activity a
ON c.Id = a.ParentActivityId

【讨论】:

  • 我会试试这个,让你知道它是怎么回事。感谢您的帮助
  • 有没有办法让它返回没有任何活动的类别
猜你喜欢
  • 1970-01-01
  • 2012-12-07
  • 2022-11-13
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多