Sql 表名为;“类型”;表中的字段

Sql 表名为;“类型”;表中的字段,sql,syntax,Sql,Syntax,这很难搜索,因为涉及到的单词在关系数据库领域是通用的,所以如果这是重复的,请给我指出正确的方向 假设我有一张“热点”表。假设一个热点可以出现在任意数量的链接表中。我不想在所有链接表中进行不必要的查询,我想指定一个“热点”类型,这样我就可以首先得到结果,然后只找到特定类型的关系 创建引用链接表真实名称的“link_type”列是一种不好的做法吗?例如,假设我有以下链接表: table link_hotspot_collectable table link_hotspot_minigame tabl

这很难搜索,因为涉及到的单词在关系数据库领域是通用的,所以如果这是重复的,请给我指出正确的方向

假设我有一张“热点”表。假设一个热点可以出现在任意数量的链接表中。我不想在所有链接表中进行不必要的查询,我想指定一个“热点”类型,这样我就可以首先得到结果,然后只找到特定类型的关系

创建引用链接表真实名称的“link_type”列是一种不好的做法吗?例如,假设我有以下链接表:

table link_hotspot_collectable
table link_hotspot_minigame
table link_hotspot_factoid
其中,下表是具有不同数据量/类型的唯一表

table collectable
table minigame
table factoid
“link\u type”列的一个可能值是“collectable”或“minigame”(或者我想我可以使用整个链接表名“link\u hotspot\u factoid”

这是一种好方法吗?是否有更有效或更好的模式来形成更简单/更快的查询

其目的是将“热点”(像素映射空间中的goemetric坐标)概括为任何其他动作/收藏品/游戏集。游戏表将与收藏品表的模式截然不同。

考虑以下模式(将其放在通用示例中,以便我可以更轻松地描述):

我想您要问的是,如果您可以更改
部分
以包含类型鉴别器,是否会使查询更快/更容易:

 ______
|Parts |
--------
|-Id   |
|-Name |
|-Type | (Plane, Car, etc.)
 ------
在这个新的模式中,你会希望做这样的事情:“我有一个零件ID,找到零件,如果它是一架飞机,我会查询飞机信息而不是看汽车”。考虑后果:

  • 您刚刚复制了数据库中的信息。在原始模型中,连接表已经声明了哪些类型的零件连接到哪种类型的车辆。您现在正在添加另一列,该列必须手动设置,并以未经检查的方式提供相同的信息。这可能很容易失去同步,给您带来头痛,可能会导致必须避免这种情况

  • 您已删除将一个零件同时应用于飞机或汽车的功能。原始架构可能有一个用于飞机或汽车的收音机,但添加类型字段可消除这种可能性。您的架构可能永远不会出现这种情况,但这会给试图理解您的架构的任何人带来困惑。不幸的是,constraint:“每个零件只能连接到
    Cars
    中的记录或
    平面
    表中的
    记录”是不可能的,但指定的类型列也不能保证这一点

  • 无论如何,要得到你想要的结果从来没有那么难/慢。对熟悉SQL的人来说,所有相关表上的联接就像决定查询第二部分应该是什么的switch语句一样清晰。实际上,它可能会比你描述的慢,因为你必须拉下整个集合n、 然后运行另一个查询以获取您要查找的结果。SQL server可能会动态执行此操作,并基于现有索引生成必要的结果


希望这与您描述的内容类似。如果是这样,我认为添加一个
类型
字段没有任何好处,因为它不值得管理类型列。如果这不是您描述的内容,请告诉我,我可以修复此响应。

都是“链接表”相同的格式?如果是这样的话,你应该考虑只使用一个属性字段的表,而不是3个不同的表,然后你就可以为每一个类型收集视图了。当我不得不定制一个数据库存储的数据映射的DB同步时,这样的事情是这样的。所以我的答案是取决于它是否与你有关。恩,没关系,但要知道,你必须告诉我们你打算怎么做。但我建议你将枚举值定义为link_类型,而不是完全限定的名称。我假设链接表的格式都是相同的,它们只是将热点链接到另一个不同类型表中的行的FK存储。因此,我的查询将来自linktable,其中热点\u id是XXX,然后我会有所有的链接,然后我会有一个属性,指示下一个查询应该在哪个表上,例如table collectable。我想这会起作用。有什么比我应该使用链接表更好的方法来形成这些类型的关系模型吗?“热点可以出现在任意数量的链接表中”——你的意思是,在不止一个链接表中?那么指定一个类型的目的是什么?我想“不幸的是,约束条件:“每个部分只能连接到Cars表中的记录或Planes表中的记录”是不可能的,但指定的类型列也不能保证这一点。“只能在验证期间发生真的=)
 ______
|Parts |
--------
|-Id   |
|-Name |
|-Type | (Plane, Car, etc.)
 ------