具有一些特定条件的ER图

时间:2016-02-10 02:26:26

标签: database entity-relationship

假设我有2个关系:UserLocation,它们通过关系going to连接。现在,going to有一个名为date的属性。如果用户最多只能在一个日期的一个位置,我该如何绘制图表?多个用户可以转到多个位置,但date属性会强制执行一种唯一性条件。

2 个答案:

答案 0 :(得分:1)

在这种情况下,我认为date不符合属性。属性是设置为值集的实体(或关系)中的函数,但dateUser不确定Location。相反,date是关系的主题,就像User一样,所以我认为date是一个实体。 Location更像是此示例中的属性。

User-Location-Date

答案 1 :(得分:1)

我认为问题不在于概念模型中的数据建模,而在于物理模型。这种情况的概念模型如下:

enter image description here

“转到”这里将被视为一个事件,即用户访问(任何)位置的时刻。由于我们在这里有一个N-N关系,因此在创建的事件(创建的关系)中定义属性/属性没有问题。这将导致带有两个外键的表。此表格告诉您用户访问某个位置的日期。

现在,谈论强加的限制......是的,我们在这里有一个限制,这将被视为SQL约束。对于某个人在某个特定日期只访问一个地方,您可以:

  • 将“VISITS”表中的“user”和“date”列定义为a 复合主键。
  • 在“VISITS”表中定义“user”和“date”列 复合形式的唯一,然后使用代理键,用于 实例

无论如何,你对这两个列的限制是唯一的,这将导致以下情况:

enter image description here

在此表(VISITS表)中,您不能重复相同的用户和相同的日期。结果是用户只能访问某个日期的某个地方。

还有另一种方法可以解决这个问题。您可以在将新数据输入数据库时​​添加一些数据验证(添加新的访问记录)。如果每个日期的访问次数增加,这种方法可能会更好。我的建议是分析您的需求,看看未来的变更/维护是否可能。如果是这样,请考虑这一点。

尽管验证数据是可能的,但请记住,您的数据库是防止数据不一致的最后一道防线。数据不一致是系统中最严重的问题之一,因为它可能会完全破坏它。因此,您不应仅仅将验证作为不一致的对策。安全安装的数据库不允许不一致的数据。

,客户端用户在尝试执行非法操作时可能会收到错误消息,但不会保存损坏的数据。

不幸的是,我对确定数据库的限制,规则和限制没有确切的知识,但一定要研究这个主题 如果你的需求发生变化在创建数据库时,理想的是除了创建表,关系,触发器,存储过程之外,还会创建某些限制。这些是数据库中定义的规则,使其几乎始终保持一致。

希望我在某种程度上帮助过。如果您有任何疑问,请随时提出。