我们正在创建一个活动构建器,我正在努力处理一个不同类型的父母一个孩子的好方法。
我们有两个表类别和活动。 类别具有ID和名称 活动有一个id和parentid
parentid活动可以是类别的id,也可以是其他活动的id。 类别具有活动,每个活动可以具有子活动。 类别仅为顶级,因此没有类别或活动具有子类别
现在我有两个问题 设置表的最佳方法是什么。 我曾考虑将它们存储在单独的列中,与具有id和某种标志的字符串相同的列,具有id的列和具有父表的另一列。
我认为这些都不是很好,并且想知道是什么。
另一个问题是我如何拉这个表。我知道我可以进行多次查看,但是如果有办法在一个方法中进行操作就会徘徊。
我们正在使用MSSQL 2012
编辑以尝试澄清和添加更多信息
答案 0 :(得分:0)
我不是SQL中“重载”的忠实粉丝。换句话说,列应包含仅表示一件事的数据。因此,我建议采用以下数据结构。
类别=> Id |名称
活动=> Id |名称| CategoryId不为null | ParentActivityId null
这样,每个活动都与一个类别相关联,并且可能与父活动相关联。
就“拉”而言?我猜你的意思是选择数据?
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