如何设计具有父子关系的数据库?

时间:2010-08-27 20:05:14

标签: database-design normalization

如果我需要在数据库中表示位置(例如国家,州/省/地区,城市等),我将如何以最简单的方式查询,扩展大多数等?我计划将此用于允许用户选择多个位置并将其与其个人资料相关联的应用程序。

想到的解决方案是:

===========================
| Id | ParentId | Name    |
===========================
| 1  | 0        | USA     |
---------------------------
| 2  | 1        | Alabama |
---------------------------

我想知道这种解决方案是否存在任何潜在问题。感谢。

4 个答案:

答案 0 :(得分:3)

如果您了解不同类型的项目(城市州国家/地区),则应创建单独的表格。将它们全部放在一个表中将使查询更加困难。

如果您使用不同的表类型,则可以强制执行参照完整性,因此您不会获得孤儿。

想想孩子们!

答案 1 :(得分:0)

这似乎非常适合可伸缩性,但是我可能会包含一个额外的列来标识实际的行/条目(如果你愿意的话,可以用于实体类型)。

这将允许您根据选择(国家,城市等)轻松查询。你可能会发现,虽然整个结构会在一张桌子上,然后你不知道开始时的深度,但是这种情况会让你感到有些痛苦。

最后,设计将取决于您可能拥有的子部分的已知数量,而这种规范化实际上可能会使生活变得更加困难,而不是。

答案 2 :(得分:0)

我使用类似的东西,并取得了很大的成功。最近的Question of mine可能会派上用场。

在某些情况下(比如这个)我不想被绑在表结构上。自我引用可能是一件好事。我不明白为什么在代码中使用相同的对象类型的树状结构是如此可以接受,但是当它涉及到数据库时它被程序员所避免。

答案 3 :(得分:0)

根据您的受众,您可能还需要考虑按类型分离名称值,以便可以对其进行本地化而不会重复分层结构。