我正在扩展一个关于体育统计数据库的数据库。不同的联赛,或者更确切地说是“比赛”,可以通过类似于某些地理区域(参赛队伍的范围/范围)的树形结构来表示:
1. Continent Competition (continent) ↑ 2. Country Competition (country) ↑ 3. Region Competition (region) ↑ 4. State Competition (state) ↑ 5. District Competition (district)
(箭头表示父地理区域实体(树结构)的FK。)
这里'设计直观:
Valid XHTML http://www.kawoolutions.com/media/competitions-geoareas-nosubs.png
我创建了“地理区域”的层次结构,基本上只是为了实现范围竞争层次结构。每个竞赛实体都提到地理区域,例如每个州都知道其(子国家)地区(parent_id)。
每个地理区域 - 比赛组合包含三个信息:比赛类型(联赛,杯赛,季后赛......),地理区域类型(参赛队伍的范围!)和地理区域名称。
以下是我想要插入数据库的比赛:
INSERT INTO Competitions (geo_area_id, type, label) VALUES ( 88, 'league', 'Deutsche Meisterschaft'); -- 'Country Championships Germany'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (248, 'league', 'Regionalmeisterschaft Nord'); -- 'Region Championships North'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (249, 'league', 'Regionalmeisterschaft West'); -- 'Region Championships West'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (250, 'league', 'Regionalmeisterschaft Sued'); -- 'Region Championships South'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (251, 'league', 'Regionalmeisterschaft Ost'); -- 'Region Championships East'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (258, 'league', 'Landesmeisterschaft Hessen'); -- 'State Championships Hesse'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (268, 'league', 'Bezirksmeisterschaft Darmstadt'); -- 'District Championships Darmstadt'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (269, 'league', 'Bezirksmeisterschaft Frankfurt'); -- 'District Championships Frankfurt'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (270, 'league', 'Bezirksmeisterschaft Giessen'); -- 'District Championships Giessen'
INSERT INTO Competitions (geo_area_id, type, label) VALUES (271, 'league', 'Bezirksmeisterschaft Kassel'); -- 'District Championships Kassel'
INSERT INTO Competitions (geo_area_id, type, label) VALUES ( 88, 'cup', 'DBB Pokal'); -- 'Country Cup Germany'
-- INSERT INTO Competitions (geo_area_id, type, label) VALUES (250, 'cup', 'Regionenpokal Süd'); -- 'Region Cup South' => DOESN'T EXIST IN REALITY!
INSERT INTO Competitions (geo_area_id, type, label) VALUES (258, 'cup', 'Landespokal Hessen'); -- 'State Cup Hessen' => PROBLEM HERE! parent should be country cup Germany, but it points to Region South due to the geo areas nature
INSERT INTO Competitions (geo_area_id, type, label) VALUES (268, 'cup', 'Bezirkspokal Darmstadt'); -- 'District Cup Darmstadt'
对于常规赛(联赛)来说这很有效(顶级实体),然而,在第二次到最后一次插入比赛表中,我意识到了一个我没有预料到的问题:
有些比赛的“父母比赛” - 由地理区域的父母决定 - 不存在。例如:每个州的德国杯比赛资格赛队直接进入国家级别,因为没有“德国地区杯”比赛。
根据他们的逻辑,看看与比赛分离的地理区域,地理区域本身正确表示我会说。只是竞争有时似乎“跳过”地理区域。当然没有什么是无法解决的,但我现在如何最好地适应这种情况呢?
我想到的替代方案:
两者都在一定程度上增加了冗余,但是我不知道如何在没有“竞赛跳过问题”本身的情况下做到这一点。
也许存在其他替代方案?如果没有,你会建议哪种替代方案?为什么?
谢谢!
答案 0 :(得分:1)
有时只是比赛 似乎“跳过”地理区域。没有 当然无法解决,但我该怎么做 现在最能适应这种情况吗?
模拟现实世界的运作方式。
不要调整您已知的模型不起作用。