2012-03-12 64 views
2

为实体存储备用名称并将其链接到“主”记录以滚动数据,最佳做法是什么?具有主参考的“备用”名称的数据库设计

例如,我有一个公司的名单;

id name 
1 Orange Kid Industries 
2 Apple Kid Inc. 
5 O.K. 

公司5 O.K.1 Orange Kid Industries的替代名称。这些公司需要谨慎地存储,以便如果儿童记录需要被绑定到5而不是1(为了存储历史数据(例如,如果公司名称改变),它可以)。

我需要将5 O.K.返回1 Orange Kid Industries作为“主”记录,因此,在查看所有1 Orange Kid Industries的孩子时,我看到所有1和5的孩子合并在一起。

我倾向于所有记录所需的主ID。如果用户创建一个新公司6 Moldy Orange Kid Industries,他可以为其分配一个主ID为1来表示这是1 Orange Kid Industries的另一个名称。

id name      master 
1 Orange Kid Industries  1 
2 Apple Kid Inc.    2 
5 O.K.      1 
6 Moldy Orange Kid Industries 1 

这似乎是最简单的路线,不需要太多的冗余数据。这种方法有什么缺点吗?

+0

堆栈交换问答格式不适合征询意见的问题。请参阅[常见问题](http://stackoverflow.com/faq#dontask)。 – Oded 2012-03-12 15:52:27

回答

1

这似乎是一个很好的解决方案给我。我唯一能想到的就是如果一个记录是自己的主记录,那么就把它留给null。可能不是一个巨大的交易,但似乎是一个潜在的无限循环陷阱。

+0

好点。我想,空值会有更多的意义。 – 2012-03-12 17:06:08

0

我想我会规范化数据。公司主表和公司名称表结束公司名称表,该公司名表将具有到公司主表的外键。我也会避免空值和任何基于空值的逻辑强制执行外键约束。 null意味着你不知道。

+0

您是否建议将公司名称存储在主表和名称表中?所以两个表中都可能有相同的名称? – 2012-03-13 14:13:51

相关问题