表设计-OR查询与单独的表

时间:2018-11-11 02:23:30

标签: sql database-design

我在表设计上需要一些帮助,不确定什么是最佳选择。基本上,我需要存储谁都有权使用任何特定资源。资源可以由不同类型的实体及其实例使用。例如,这里是表示相同内容的简单方法

  1. 我有两种不同类型的Entity,EntityType1和EntityType2 (在我的情况下,这应该是一个很小的数字,不超过10个)

  2. 每个实体可以有多个实例,我们可以识别它们 带有EntityId

  3. 我们可以有不同的资源类型R1,R2,R3..etc

  4. 每种资源类型可以有多个实例

enter image description here

还有另一个要求,我可以说所有特定类型的实体都可以访问一个特定的资源实例。类似于EntityId列中的*。我还将在entityId上具有索引,因此只想将其保留为INT类型。请注意,我可以同时输入所有实体和特定实体。

我可以想到两个选择

  1. 我将选择一些无效的EntityId来表示所有实体(*),例如0,-1或NULL,然后使用OR子句返回特定EntityId允许的所有资源。例如:EntityType = 'EntityType1' and (EntityId = 1 or EntityId = 0)
  2. 创建单独的表并添加新条目以指示所有实体权限,然后加入表以返回数据。

有人可以告诉我在这里或其他建议中哪个选项更可取,我更倾向于选项2,因为我们不需要在表中存储一些无效值来表示某些东西。

1 个答案:

答案 0 :(得分:0)

您应该有一个实体表,其中似乎有EntityIdEntityType的列。

您应该有一个资源表,其中包含ResourceIdResourceType

然后,听起来您想要两个额外的表:

  • 实体与资源之间的映射表。
  • 实体类型和资源之间的映射表。

我将从这组关系开始。在表中使用通配符可能导致join出现or种情况,这实际上会使速度变慢。