我有4个桌子,法庭,分部,地址和电话号码。
每个法院可能有一个或多个部门,民事,刑事,家庭等。这些组合中的每一个都可能有一个或多个地址,即特定法院的民事法庭可能会或可能不会与罪犯的身份地址不同法庭。这同样适用于电话号码,每个部门或地址可能相同,也可能不同。
我已经考虑了几种方法,但不知道最好用吗?
a)我可以有一个大表,它可以多次复制大部分数据。
b)我考虑过在分区表中持有法院的FK,并在地址表中持有分部的FK。这意味着在分部表中复制每个法院的分部值。我当时不确定如何处理电话桌。
c)我最后的决定是拥有一个链接表,其中包含FK所有其他4个表。这意味着不会复制数据,但是意味着需要很多连接才能获得任何有意义的东西,而且使用起来可能很笨拙。
我确信我忽略了这里显而易见的事实,但建模这些表的最佳方法是什么?
这些表格将通过CakePHP访问,但也许我们暂时将其留在一边。
答案 0 :(得分:1)
如果计算四个表的所有组合的行数少于10,000行,我建议只使用平坦的单表结构。如果行大小约为8K,则数据大小约为80兆。大多数免费或低成本的数据库将在内存中保留那么多,并使您的I / O成本接近零。
如果您觉得需要多个表格,那么这里的设计可以让您灵活地扩展设计。您可以将特定于应用程序的列添加到显示的表中。
TypeList表可以包含State,Federal,Local等类型的法院,条目由TL_Table值“Court”键入。分区列表将存储在TL_Type为“Division”的位置。使用TL_Type可以填充下拉列表以进行数据输入。电话号码的类型列表可能是待命,传真,小学,前台,文员,sherrif等。
你决定哪种方式我肯定会有一个尖锐的负面评论,但如果它有效,他们就会在太空中进行筛选。
答案 1 :(得分:0)
您描述的是星型模式,是建议的方式
court 1:m divisions
divisions 1:m addresses
address 1:m telephone
我认为你应该看一下你需要做什么查询来获取数据,尽管只是一个描述而不是sql将是第一步