我需要在mysql数据库中存储有关挪威郡,市和城市的信息。它们以等级方式相关(一个城市属于一个同样属于一个县的市政当局)。
最好将它存储为三个不同的表并通过外键引用,还是应该将它们存储在一个表中并将它们与parent_id字段关联?
两种解决方案的优缺点是什么? (两者结构效率明智)
答案 0 :(得分:4)
如果你真的有这三个级别(县,市,市)的限制,我认为你最开心的是三个单独的表,外键每个达到一个级别。这将使查询几乎无关紧要。
使用带有引用同一个表的parent_id字段的单个表允许您表示任意树结构,但使查询从节点到根提取完整路径,这是在应用程序代码中最佳处理的迭代过程。
单独的表格解决方案将更容易使用。
答案 1 :(得分:3)
County
,Municipality
和City
听起来不像是同一类数据;所以,我会使用三个不同的表:每个数据类型一个。
然后,我确实会在这些之间使用外键。
说效率,不确定它会有多大变化:
但是,从结构上讲,如果这些是三种不同的实体,那么使用三种不同的表是有意义的。
答案 2 :(得分:3)
三个不同的表格:
答案 3 :(得分:1)
我建议使用三个不同的表,因为它们是三个不同的实体。
在这些情况下,我只使用一个表,你不知道层次结构的深度,但事实并非如此。
答案 4 :(得分:1)
我会把它们放在三个不同的表中,只是因为它有3个不同的概念。这会妨碍速度并使查询复杂化。但是,鉴于MySQL没有对hirachical查询的任何特殊支持(如Oracle的 connect by 语句),无论如何这些都会很复杂。
答案 5 :(得分:1)
不同的表:它只是“正确”。我怀疑你会看到任何性能增益/损失,但这是一个正确地预先建模它可能会在以后节省很多麻烦。首先,它将使SQL SELECT更容易编写和阅读。
答案 6 :(得分:1)
你会得到不同的意见,但我个人的偏好是拥有单独的表,因为它们是独立的实体。
实际上,您需要考虑您将对此数据进行的查询,通常您的答案将来自此。使用单独的表格,您的查询看起来会更清晰,最终您不会自己保存任何内容,因为您仍然会将表格连接在一起,即使它们是同一个表格。
答案 7 :(得分:0)
我会使用三个单独的表,因为您确切地知道您正在使用哪些类别的信息,并且不需要动态地改变层次结构的“深度”。
它还可以使数据更易于管理,因为您只需了解表格就可以判断数据是用于城市,市政府还是县(而无需识别数据的“深度”)层次结构中的记录首先!)。
既然你可能会进行自我加入以使层次结构起作用,我怀疑将所有数据放在一个表中会有什么好处。
答案 8 :(得分:0)
在数据软件外壳应用程序中,Kimball方法的拥护者可能会将这些字段放在同一个属性表中:
create table city (
id int not null,
county varchar(50) not null,
municipality varchar(50),
city varchar(50),
primary key(id)
);
这个想法应该永远不会超过事实表。
我只是将此作为另一种观点。我会亲自参加3桌设计。
答案 9 :(得分:0)
这是“数据库规范化”的一种情况,它是组织关系数据库的字段和表以最小化冗余和依赖性的过程。目的是隔离数据,以便可以在一个表中进行字段的添加,删除和修改,然后通过定义的关系传播通过数据库的其余部分。 如果任务已在不同开发人员之间分配,则多个表将有助于这种情况,或者不同级别的用户需要不同的权限来查看和更改数据,或者当您将此数据用于其他目的时,小表也会有所帮助。 我的投票将是多个表格 - 数据适当分配。