我正在从事漫画书数据库项目,我需要能够在特定漫画问题中包含各个位置。我必须解决几个问题:
- 地点通常位于其他地点内(“号角日报大楼”在“第 39 街和第二大道的拐角处”在“纽约市”在“纽约”等)
- 虽然位置的层次结构非常标准(Universe->Dimension->Galaxy->System->Planet->Continent->Country->State->City->Street->Building->Room),但并非所有父位置每个位置都必须知道(例如,漫画可能涉及非洲某个未命名国家的命名建筑物)。
- 有一些地方不适合那种漂亮的等级制度,但在某些时候会分支(例如,“野蛮之地”是南极洲的一个巨大丛林,所以虽然它的父级是一个大陆,但它不是一个国家) .
我的主要目标是能够搜索任何位置并获取具有该位置或该位置内任何位置的所有问题。第二个目标是能够在应用程序的管理方面能够自动完成完整的位置(即,我为一个问题键入一个新建筑物并指定它在纽约市,它会拉出所有“纽约市“实例——是的,数据库中不止一个:P——让我选择Earth-616中的一个或Earth-1610中的一个,或者我可以在不同的父位置下添加一个新的纽约市) . 我能做的所有前端工作,并在时机成熟时弄清楚,我只是不确定此时的数据库设置。
任何帮助,将不胜感激!
更新:
在与几个同行进行了多次头脑风暴之后,我想我想出了一个比建议的嵌套模型更简单的解决方案。
位置表如下所示:
- ID
- 姓名
- 类型(前面提到的类别的枚举列表,包括“其他”选项)
- Uni_ID(父 Universe 的 ID,如果不适用,则为 null)
- Dim_ID(父维度的 ID,如果不适用,则为空)
- Gal_ID(父 Galaxy 的 ID,如果不适用,则为 null)
...等等通过所有类别...
- Bui_ID(父建筑物的ID,如果不适用则为空)
因此,虽然有很多字段,但搜索和自动完成工作真的很容易。任何给定位置的所有父级都在行中,任何位置的所有子级都可以通过单个查询找到,并且一旦为新位置定义了类型,自动完成就可以轻松工作。在这一点上,我倾向于这种方法而不是嵌套模型,除非有人能指出我没有看到的这种设置的任何问题。