【问题标题】:SqL Design for Countries - States - Cities国家 - 州 - 城市的 Sql 设计
【发布时间】:2014-05-11 06:46:05
【问题描述】:

您好,我正在为Countires、States、Cities 开发一个带有HTML 下拉菜单的简单表单。添加国家,州,城市并更新它们已经完成,没有问题。每件事都完美无缺。问题是在删除时出现的(假设是停用)。

我通过引用网络中的一些网站,设计了适合此类国家、州、城市下拉列表的表格。喜欢:

Countries Table:

   |SerialNo|CountryName|CountryId|Active|

States Table
   |SerialNo|StateName|StateId|CountryId|Active|


CitiesTable:
   |SerialNo|CityName|CityId|StateId|IsActive|

所以在停用任何国家时,我将 Active="false",因此停用的国家不会显示在我的网格中。如果这样做的话,各个国家/地区的州也应该成为停用权。

所以我这样做了: SQL查询:

Update CountriesTable set Active='false' where CountryId= @CountryId
Update StatesTable set Active='false' where CountryId= @CountryId 

因为我在两个表中都有 CountryId,所以我可以在两个表中停用国家、州。但是我如何才能停用停用状态的城市? Sql中有一个叫做Triggers的概念,它在对特定表进行数据操作后更新其他表,我可以用Triggers实现我的要求,还是有什么好的方法来实现它?

我怎样才能实现它?

我不想在城市表中再添加一列 CountryId 对不起,我的英语不好。希望我对你们所有人都清楚!任何参考,任何 Sql 查询,任何帮助都非常感谢!!!

【问题讨论】:

  • 请注意,并非所有国家/地区都有州(或者,至少,国家和城市之间的领土划分并不总是称为州)。您应该指出您正在使用哪个 DBMS(尽管我有把握它是 MS SQL Server;哪个版本可能很重要,特别是如果它是过时的)。是的,如果您希望将一个国家/地区的状态更新传播到各州和城市,您将使用触发器。但是,您的触发器也需要适应设置IsActive = 'true';如果你这样做,你不会希望触发器将事情设置为 false。
  • 此外,您还需要包含实体的任何 ISO 信息(如果存在) - 即 the country codes。州(国家/地区)和城市可能有相同的信息。

标签: sql


【解决方案1】:

不需要触发器。选择States时,加入Countries并过滤Country IsActive

SELECT * 
FROM Countries 
WHERE IsActive <> False;

SELECT s.*
FROM States s
INNER JOIN Countries c on c.CountryId = s.CountryId
WHERE c.IsActive <> False;

【讨论】:

    【解决方案2】:

    这是一个基本的UPDATE 语句,用于为给定的国家/地区ID 设置Cities 表中正确行的IsActive 列。

    UPDATE Cities
       SET IsActive = 'false'
     WHERE StateID IN (SELECT StateID FROM States WHERE CountryID = @CountryID);
    

    它几乎适用于任何 SQL DBMS。可能还有其他使用连接符号的符号可以让您以不同的方式编写它。

    您必须使用 DBMS 的相关语法将其合并到 DBMS 的触发器中。由于您没有确定哪个 DBMS,我们无法确定(不过,正如我所指出的,它很有可能是 MS SQL Server)。

    或者您可以重新设计架构和查询,以便将国家/地区的 IsActive 状态设置为 false 足以确保不显示该国家/地区的州或城市 - 正如 Mitch Wheat 在其 answer 中所倡导的那样。

    请注意,您的触发器应考虑国家/地区再次活跃;使用'false' 并不总是合适的。

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 2017-10-20
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2017-11-11
      • 2012-06-13
      • 2011-03-23
      相关资源
      最近更新 更多