假设我有2个关系:User
和Location
,它们通过关系going to
连接。现在,going to
有一个名为date
的属性。如果用户最多只能在一个日期的一个位置,我该如何绘制图表?多个用户可以转到多个位置,但date
属性会强制执行一种唯一性条件。
答案 0 :(得分:1)
在这种情况下,我认为date
不符合属性。属性是设置为值集的实体(或关系)中的函数,但date
和User
不确定Location
。相反,date
是关系的主题,就像User
一样,所以我认为date
是一个实体。 Location
更像是此示例中的属性。
答案 1 :(得分:1)
我认为问题不在于概念模型中的数据建模,而在于物理模型。这种情况的概念模型如下:
“转到”这里将被视为一个事件,即用户访问(任何)位置的时刻。由于我们在这里有一个N-N关系,因此在创建的事件(创建的关系)中定义属性/属性没有问题。这将导致带有两个外键的表。此表格告诉您用户访问某个位置的日期。
现在,谈论强加的限制......是的,我们在这里有一个限制,这将被视为SQL约束。对于某个人在某个特定日期只访问一个地方,您可以:
无论如何,你对这两个列的限制是唯一的,这将导致以下情况:
在此表(VISITS表)中,您不能重复相同的用户和相同的日期。结果是用户只能访问某个日期的某个地方。
还有另一种方法可以解决这个问题。您可以在将新数据输入数据库时添加一些数据验证(添加新的访问记录)。如果每个日期的访问次数增加,这种方法可能会更好。我的建议是分析您的需求,看看未来的变更/维护是否可能。如果是这样,请考虑这一点。
尽管验证数据是可能的,但请记住,您的数据库是防止数据不一致的最后一道防线。数据不一致是系统中最严重的问题之一,因为它可能会完全破坏它。因此,您不应仅仅将验证作为不一致的对策。安全安装的数据库不允许不一致的数据。
,客户端用户在尝试执行非法操作时可能会收到错误消息,但不会保存损坏的数据。不幸的是,我对确定数据库的限制,规则和限制没有确切的知识,但一定要研究这个主题 如果你的需求发生变化在创建数据库时,理想的是除了创建表,关系,触发器,存储过程之外,还会创建某些限制。这些是数据库中定义的规则,使其几乎始终保持一致。
希望我在某种程度上帮助过。如果您有任何疑问,请随时提出。