不相关的表格和时间间隔
Unrelated tables and time intervals
我将对我目前在设计数据库时遇到的情况发表评论。
我有以下 tables:
user (id, name, lastname)
role (id, name)
user_role (user_id, role_id, from_date, to_date)
period (id, name, from_date, to_date)
期间 table 充当数据主控,以了解我在应用程序中定义的期间的名称。
在这种情况下,我只提到 user
、role
和 user_role
table,但还有更多 table 有句点.
时期 table 的目的是充当我模型 table 中存在的不同时期的标签系统。此 table 与其他 table 没有任何外键关联。要进行搜索并将其他 table 与此相关联,使用起始日期和截止日期进行连接。
例如,user_role
table 的元组可以有一个开始日期和结束日期,它涵盖了期间 table 中定义的多个期间,因此它会被标记为以及它包含的时期的名称。
period
table 是一个不相关的 table 可以吗?它只是用来给时期命名,这就是我这样说的原因。你能想出另一种更好的方式来提高它吗?句点 table 是否应该以其他方式与其他 table 相关?
提前致谢。
所以你有两种情况。
情况一,(外键)您确实引用了另一个 table 的句点。
假设 table x 指的是 table 到 period_id 期间。
如果您需要更新多个使用同一周期的行的周期,则只需更新周期 table 中的一行。
此解决方案的好处是,如果 table x 中有 1000 行引用一个时间段,则只需更新时间段而不是 1000 行。
此外,如果多个 table 中的多行引用同一时期,您只需更新时期 table 中的一行。
缺点是,如果您想要一个不同于现有周期的周期,您必须创建一个新周期并引用 table x 中的周期,而不是仅更新 table x。
情况二你把句号存入tablex
如果不从table x 中引用table 期间,自定义期间更容易,只需要更新table x 而不是table 期间的记录].
因此,如果您不在多行之间共享数据,则情况一的好处不存在,情况二更好。
您正在用数据仓库术语创建时间维度。而且你不需要和其他有关系 tables.This table 只用于查找,可以根据日期间隔使用。
句点 是 与 user_role 相关,它们都有 from_date 和 to_date 列相互关联。
他们没有外键关系,但如果您想这样做,您绝对可以将经期 table 加入 user_role table。
我认为没有更好的设计方法,因为您的月经是任意的,并且与您的 user_role 之间存在多对多关系。
如果句点 table 可以是不相关的问题 table 最终是一个业务问题,只能由您/您的业务需求来回答...;)
如果例如您的用户角色指的是一个或多个时期,用户角色中应该有一个 FK table 而不是开始和结束日期 / 或者,如果多对多 - 关系 table。
如果周期的定义遵循不同的逻辑并允许重叠周期或从事件到日期/周期的异步分配,那么您可以不相关。
Tables (bases, views & query results) 表示关系(ship)s/associations。 FK(外键)约束有时称为 "relation(ship)s" 但实际上不是。它们是事实陈述。他们说子行作为 PK(主键)或 UNIQUE 出现在别处;实体在别处参与一次。 Table 含义充分查询。约束——包括 PK、UNIQUE、NOT NULL、CHECK 和 FK——对于查询既不是必需的也不是充分的。它们用于由 DBMS 强制执行的完整性。 (但是当约束成立时,其他查询 return 与不假设约束的查询的结果相同。)
当约束不成立时声明约束 & 未被已声明的约束所暗示,并且当它们不成立或被已声明的约束所暗示时不声明它们。
Re querying & constraints.
我将对我目前在设计数据库时遇到的情况发表评论。
我有以下 tables:
user (id, name, lastname)
role (id, name)
user_role (user_id, role_id, from_date, to_date)
period (id, name, from_date, to_date)
期间 table 充当数据主控,以了解我在应用程序中定义的期间的名称。
在这种情况下,我只提到 user
、role
和 user_role
table,但还有更多 table 有句点.
时期 table 的目的是充当我模型 table 中存在的不同时期的标签系统。此 table 与其他 table 没有任何外键关联。要进行搜索并将其他 table 与此相关联,使用起始日期和截止日期进行连接。
例如,user_role
table 的元组可以有一个开始日期和结束日期,它涵盖了期间 table 中定义的多个期间,因此它会被标记为以及它包含的时期的名称。
period
table 是一个不相关的 table 可以吗?它只是用来给时期命名,这就是我这样说的原因。你能想出另一种更好的方式来提高它吗?句点 table 是否应该以其他方式与其他 table 相关?
提前致谢。
所以你有两种情况。
情况一,(外键)您确实引用了另一个 table 的句点。 假设 table x 指的是 table 到 period_id 期间。 如果您需要更新多个使用同一周期的行的周期,则只需更新周期 table 中的一行。 此解决方案的好处是,如果 table x 中有 1000 行引用一个时间段,则只需更新时间段而不是 1000 行。 此外,如果多个 table 中的多行引用同一时期,您只需更新时期 table 中的一行。 缺点是,如果您想要一个不同于现有周期的周期,您必须创建一个新周期并引用 table x 中的周期,而不是仅更新 table x。
情况二你把句号存入tablex 如果不从table x 中引用table 期间,自定义期间更容易,只需要更新table x 而不是table 期间的记录].
因此,如果您不在多行之间共享数据,则情况一的好处不存在,情况二更好。
您正在用数据仓库术语创建时间维度。而且你不需要和其他有关系 tables.This table 只用于查找,可以根据日期间隔使用。
句点 是 与 user_role 相关,它们都有 from_date 和 to_date 列相互关联。
他们没有外键关系,但如果您想这样做,您绝对可以将经期 table 加入 user_role table。
我认为没有更好的设计方法,因为您的月经是任意的,并且与您的 user_role 之间存在多对多关系。
如果句点 table 可以是不相关的问题 table 最终是一个业务问题,只能由您/您的业务需求来回答...;) 如果例如您的用户角色指的是一个或多个时期,用户角色中应该有一个 FK table 而不是开始和结束日期 / 或者,如果多对多 - 关系 table。 如果周期的定义遵循不同的逻辑并允许重叠周期或从事件到日期/周期的异步分配,那么您可以不相关。
Tables (bases, views & query results) 表示关系(ship)s/associations。 FK(外键)约束有时称为 "relation(ship)s" 但实际上不是。它们是事实陈述。他们说子行作为 PK(主键)或 UNIQUE 出现在别处;实体在别处参与一次。 Table 含义充分查询。约束——包括 PK、UNIQUE、NOT NULL、CHECK 和 FK——对于查询既不是必需的也不是充分的。它们用于由 DBMS 强制执行的完整性。 (但是当约束成立时,其他查询 return 与不假设约束的查询的结果相同。)
当约束不成立时声明约束 & 未被已声明的约束所暗示,并且当它们不成立或被已声明的约束所暗示时不声明它们。
Re querying & constraints.