我有5个具有相同结构和相同列的表: id,name,description 。所以我想知道什么是最好的设计方法或避免有5个具有相同列的表:
请注意,我会有一个关联表,其中应包含城市ID,ID国家/地区,ID大陆等,以便我可以将其显示在报告中
感谢您的建议。
答案 0 :(得分:0)
列名称并不重要,只是列中的数据。如果城市描述,国家描述和大陆描述是不同的信息,那么您已经以正确的方式这样做了。你唯一想要减少这些数据的时间就是重复信息,但是对于数据的标题来说这很好。
事实上。你这样做是正确的。对于提到的每个领域,国家/地区将具有不同的城市值Id只是一个id,每个表都应该有一个。不同国家和城市的名称和描述不一样。
此外,这样一来,如果你想要一个国家的名字,你就不必经过每个国家,大陆和城市。您只有192个条目可以通过。如果你在一个庞大的表中拥有所有这些,你将不得不将它用于所有内容,并在每次需要数据时检查每个结果。除了单独的表之外,您还必须以其他方式区分城市,国家和大陆。
例如:
方法1,有5个表:
list1.Select(Function(p) p.ItemID).Intersect(list2.Select(Function(p)p.ItemID)).Any()
与
相同方法2,1表:
SELECT * FROM country
答案 1 :(得分:0)
在这种情况下决定使用多少个表只取决于。
最重要的因素是这五件事是独立的实体还是相关的。理解这一点的一个简单方法是通过了解外键关系:其他表是否有一个列可以引用五个中的任何一个(比如" geoid")?或者其他表格中是否有一列通常是指五个中的一个(" cityid"," countryid")?定义有用的外键约束的能力通常会驱动表结构。
还有其他考虑因素。如果您的数据位于地理级别,那么它可能代表层次结构。 。 。城市在各个国家,各个国家都在各大洲。某些数据库(例如MySQL)根本不支持分层查询。在这些情况下,您可以考虑对数据进行非规范化以进行查询。
其他考虑也可以发挥作用。如果您的申请将被国际化,那么将所有参考表放在一个地方就很方便 - 提供特定文化信息(语言,货币符号等)。处理这种情况的一种方法是将所有这些引用放在一个表中(并且可能使用更复杂的外键关系)。
答案 2 :(得分:0)
如果您有表示城市,国家和大陆的表格,并且它们都具有完全相同的字段,则您有一个根本问题。在现实生活中,每个城市都在一个国家,每个国家至少在一个大陆(或多或少),但您的数据结构并未反映出这一点。您的城市表应如下所示:
id (primary key)
countryId (foreign key to country)
name
other fields
您需要在国家和大陆之间建立类似的关系。但是,在你这样做之前,你必须决定如何处理两个大陆的俄罗斯和帕劳之类的国家。
您可能还希望拥有一个provinceStateTerritory表来帮助您整理美国名为Springfield的38个地方。或者,您可能希望以不同的方式处理这种情况。