设计具有公共列

时间:2015-12-22 16:05:12

标签: sql

我有5个具有相同结构和相同列的表: id,name,description 。所以我想知道什么是最好的设计方法或避免有5个具有相同列的表:

  1. 创建一个包含我的三个常见类别的类别表 列和另一列“枚举”将区分我的类别 前(城市,国家,大陆等)
  2. 创建一个包含我的三个常见类别的类别表 列并创建其他五个只包含一个表的表 标识。
  3. 请注意,我会有一个关联表,其中应包含城市ID,ID国家/地区,ID大陆等,以便我可以将其显示在报告中

    感谢您的建议。

3 个答案:

答案 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个地方。或者,您可能希望以不同的方式处理这种情况。