不相关的表和时间间隔

问题描述 投票:2回答:5

我将在设计数据库时对当前存在的情况进行评论。

我有下表:

user (id, name, lastname)

role (id, name)

user_role (user_id, role_id, from_date, to_date)

period (id, name, from_date, to_date)

期间表用作数据主数据,以了解我在应用程序中定义的期间的名称。

在这种情况下,我仅提及userroleuser_role表,但还有许多带有句点的表。

周期表的目的是充当模型表中存在的不同周期的标签系统。该表没有任何外键与其他表相关联。为了进行搜索并使其他表与此相关,使用日期从和日期到进行连接。

例如,user_role表的一个元组可以具有一个起始日期和一个截止日期,该日期可以覆盖期间表中定义的多个期间,因此将用其所包含的期间的名称进行标记。

period表是不相关的表可以吗?它仅用于给句点起名字,这就是为什么我这样说。您能想到另一种更好的方法吗?周期表是否应该以其他方式与其他表相关?

提前感谢。

sql database-design period
5个回答
2
投票

您正在使用数据仓库术语来确定时间维度。并且您不需要与其他表有关系。该表仅用于查找,并且可以基于日期间隔使用。


2
投票

所以您有两种情况。

情况一,(外键)您确实引用了另一张表中的句点。假设表x通过period_id引用周期表。如果您需要为使用相同期间的许多行更新期间,则只需更新期间表中的一行。此解决方案的好处是,如果表x中有1000个行引用一个期间,则只需更新该期间,而不必更新1000行。同样,如果多个表中的多行引用相同的期间,则只需更新期间表中的一行。缺点是,如果您想要一个不同于现有期间的期间,则必须创建一个新期间并引用表x中的期间,而不是仅更新表x。

情况二,您将期间存储在表x中如果您不从表x引用周期表,则更容易自定义周期,只需更新表x即可,而不是更新周期表中的记录。

因此,如果您不在多行之间共享数据,则情况一的好处不存在,而情况二则更好。


0
投票

period is与user_role有关,它们都具有彼此相关的from_date和to_date列。

它们没有外键关系,但是如果您要这样做,则可以将您的期间表绝对加入到user_role表中。

我不认为有更好的方法来设计它,因为您的时段是任意的,并且与user_roles有多对多的关系。


0
投票

周期表可能是不相关的表的问题最终是一个业务问题,只能由您/您的业务需求来回答...;)如果例如您的用户角色是指一个或多个期间,则用户角色表中应该有一个FK,而不是开始日期和结束日期,或者如果是多对多,则应该是一个关系表。如果期间的定义遵循不同的逻辑,并且允许重叠的期间或从事件到日期/期间的异步分配,那么不相关就可以了。


0
投票

表(基础,视图和查询结果)表示关系(船)/关联。 FK(外键)约束有时称为“关系(ship)”,但并非如此。它们是事实的陈述。他们说子行在其他地方显示为PK(主键)或UNIQUE;实体一次在其他地方参与。表的含义对于查询来说是必要且足够的。约束-包括PK,UNIQUE,NOT NULL,CHECK和FK-既不需要查询也不足以查询。它们是由DBMS强制执行的完整性。 (但是,当约束成立时,其他查询返回的结果与不假定约束的查询相同。)

[当它们拥有&时声明约束,而不是已经声明的约束所隐含,并且当它们不持有或者被已经声明的约束隐含时就不要声明它们。

Re querying & constraints.

© www.soinside.com 2019 - 2024. All rights reserved.