首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >欧洲废物目录代码的母/树参考完整性检查

欧洲废物目录代码的母/树参考完整性检查
EN

Stack Overflow用户
提问于 2019-11-06 16:31:03
回答 1查看 35关注 0票数 0

我正在尝试创建一个数据库,其中一部分涉及存储欧洲废物目录(EWC)代码。

EWC代码是一个分层的2、4或6位代码,其中前2个字符表示章节,后面2个字符表示子章节,最后2个字符表示浪费描述。

例如:

来自农业、园艺、水产养殖、林业、狩猎和渔业、食品准备和加工的02废物

肉的制备和加工过程中产生的0202废物。鱼类及其他动物源性食物

不适合消费或加工的020203材料

需要存储整个树,因此在创建子记录时,我希望确保父树存在。

然而..。我有点困惑该怎么处理这件事。不直接引用列的外键(即:首先调用函数的尝试)触发语法错误:

代码语言:javascript
复制
...
foreign key substring(ewc_code, 1, length(ewc_code) - 2) references cdsw_data.ewc_codes (ewc_code) match simple on update restrict on delete cascade
...
代码语言:javascript
复制
ERROR:  syntax error at or near "substring"
LINE 5:  foreign key substring(ewc_code, 1, length(ewc_code) - 2) re...

有人能给我找个合适的解决办法吗?

表结构:

代码语言:javascript
复制
create table cdsw_data.ewc_codes (
    ewc_code varchar(6) primary key,
    ewc_descrition text,
    constraint valid_ewc check(ewc_code ~ '^(\d\d){1,3}$')
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-07 01:07:09

我可以想到三种方法:

  • 使用3种不同的表,一种是两位数列,一种是两位数列,另一种是两位数列。使用这些作为复合主键。声明对父表列的外键引用。有一个(可能是重载的)函数将完整键计算为一个字符串。
  • 使用触发器函数
  • 执行所有完整性检查,使用一个可以用作外键的助手列,并断言它具有预期值:

创建表cdsw_data.ewc_codes ( ewc_code varchar(6)主键,ewc_parentcode varchar(4)引用cdsw_data.ewc_codes、ewc_description文本、约束valid_ewc检查(ewc_code~ '^(\d\d){1,3}$')、约束父检查(ewc_parentcode与null_if(左(ewc_code,-2)、‘’)没有区别);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58734665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档