1

我有以下表格。

  1. Available_Ip_Address(IP_Address_ID(主键)、描述、状态)。

  2. Virtual_Machine(VM_ID(主键),描述,IP_Address(外键))

场景如下:-

  1. 我们维护单个表的所有可用 IP 地址。

  2. 我们在另一个表中维护虚拟机信息,但可以随时将特定 IP 地址分配给单个 VM。

  3. 所以我在添加虚拟机时添加了一个下拉列表,其中包含所有状态为“可用”的 IP 地址。
  4. 但由于两个用户可以创建一个虚拟机,他们可能会选择相同的可用 IP 地址
  5. 所以我发现保护我们系统的最佳方法是使 Virtual_Machine 表中的外键 IP_Address 唯一。
  6. 然后,如果两个用户选择相同的 IP 地址,则会在数据库中为其中一个用户引发异常,我可以传播异常,然后向用户显示一条用户友好的消息,表明该 IP 地址可能已被占用。

所以我的方法是否被认为是一个有效的设计,或者我应该寻找在 IP_address 字段上添加一个时间戳字段,所以如果 IP 地址的状态自上次查询以来发生了变化,那么记录将具有新的时间戳,并且将引发异常在应用层面。

此致

4

2 回答 2

2

对于这种情况,可以认为这是正确的做法。它易于实施和维护。你只需要记录下来(在纸上和代码上)。

时间戳可用作并发检查,但在您的情况下,将约束添加到数据库就绰绰有余,因为没有人会插入重复的记录,而其他尝试的人将收到一条消息,告诉您原因。(考虑到您将处理特定的异常并显示相应的消息)

于 2013-06-01T01:07:48.037 回答
2

任何应该包含唯一值的列都应该声明为唯一的。约束primary keynot null unique行为相同。(例如,不计算隐式聚集索引的副作用。)

例如,可以像这样创建美国的州表。

CREATE TABLE states (
  state varchar(15) primary key,
  abbr varchar(10) not null unique,
  postal_code char(2) not null unique
);
于 2013-06-01T01:10:02.420 回答