我有这个:
create table airport
(idairport varchar(1),
name varchar(1),
city varchar(1),
primary key(idairport));
是否可以检查一个城市的机场不超过3个?
编辑:
练习是:
将概念架构转换为关系模型。我们想知道,每个机场,那里的飞机和可能的目的地。如果模型未规范化,则将其标准化,避免存在空值。
约束:
解决方案必须是一组“CREATE TABLE”句子。表达尽可能多的完整性约束。由于关系转换而仅指定所有“NOT NULL”。此外,您不应忘记定义必要的外键和替代键(UNIQUE + NOT NULL)。
翻译后(如果我没错):
create table aircraft
(idaircraft varchar(1),
seating varchar(1),
primary key(idaircraft));
create table destination
(idairportorigin varchar(1) references airport(idairport),
idairportdestination varchar(1) references airport(idairport),
idaircraft varchar(1),
check(idairportorigin <> idairportdestination),
primary key(idairportorigin, idairportdestination, idaircraft),
foreign key (idaircraft) references aircraft(idaircraft));
答案 0 :(得分:0)
这样的事情会告诉你。
select city, count(city) citycount
from airport
group by city
having count(city) >=3
答案 1 :(得分:0)
“是否可以检查一个城市的机场不超过3个?”
不使用标准化数据模型,仅使用create table语句。
即使单独使用触发器也是不够的,因为读取一致性会阻止事务看到其他未经通信的事务。
这样做的唯一安全方法是使用存储计数的on-commit物化视图,并在MV表的count列上放置一个约束,以防止它超过3。
答案 2 :(得分:-2)
如果你在你的数据库中写入触发器,那么下面的sql将为你提供机场数量 -
select count(idairport) from airport where city = 'entered city'
,
然后您可以在预插入或更新前触发器中放弃添加任何机场。
如果你使用一些编程api,如jdbc等 -
然后通过上面的sql,您将在输入/更新任何数据之前计算机场数,然后您可以从此编码点放弃添加/更新。