在场和缺席的每一行都有一个声明。只需编写您需要的语句模板来描述您的应用情况。
一个表有一个相关的参数化语句(proposition)模板(predicate)。表列是模板参数。使模板成为真实语句的行是表中的行。其他/不存在的行是错误的陈述。所有表格的所有当前存在和不存在的行一起描述了当前情况。
Programs(progid,progname,progdesc,chtypeid) -- program [programid] named [progname] with description [progdesc] has channel type [chtypeid]
ChannelType(chtypeid,chtypedesc) -- channel type [chtypeid] has description [chtypedesc]
Channel(chnumber,chtypeid) -- channel [chnumber] is of type [chtypeid]
ProgramPackage(pkgid,pkname,price) -- programming package [pkgid] named [pkgname] costs $[price]
-- keys and fks straightforward
模板和可能出现的情况决定了约束。 (但无法从约束中推断出模板,或需要哪些其他模板。)
请注意,下面的 arity 约束是根据您找不到的“关联表”模板给出的。
一个节目可以在一个或多个频道上播放。
plays(progid,chnumber) -- program [progid] plays on channel [chnumber]
-- 2 fks
-- plays progid:chnumber is many:many or 1:many
一个频道可以多播一个或多个节目。
-- plays progid:chnumber is many:many or many:1
-- so (per the previous comment) it's many:many
-- so pk (progid,chnumber)
(一共10个频道)
-- COUNT(Channels) = 10
-- [is this a constraint, or a certain situation?]
一种渠道类型可以由一个或多个渠道组成。
CTContainsCh(chtypeid,chnumber) -- channel type [chtypeid] contains channel [chnumber]
-- 2 fks
-- CTContainsCh chtypeid:chnumber is many:many or 1:many
-- so not pk (chtypeid)
(有 5 种类型中的两种,每种类型分配 2 个特定通道)。
-- [is this a constraint, or a certain situation?]
一个节目包可以包含一个或多个频道(或频道类型)。
PPContainsCh(pkgid,chnumber) -- programming package [pkgid] contains channel [chnumber]
-- 2 fks
-- PPContainsCh pkgid:chnumber is many:many or 1:many
PPContainsCT(pkgid,chtypeid) -- programming package [pkgid] contains channel type [chtypeid]
-- 2 fks
-- PPContainsCT pkgid:chtypeid is many:many or 1:many
一个频道(或频道类型)可以出现在一个或多个节目中
包。
-- PPContainsCh pkgid:chnumber is many:many or many:1
-- so (per the previous comment) it's many:many
-- so pk (pkgid,chnumber)
-- PPContainsCT pkgid:chtypeid is many:many or many:1
-- so (per the previous comment) it's many:many
-- so pk (pkgid,chnumber)
-- probably you intend PPContainsCT(pkgid,chtypeid) == EXISTS chnumber [ PPContainsCh(pkgid,chnumber) AND CTContainsCh(chtypeid,chnumber)]
-- ie PPContainsCT = (PPContainsCh JOIN CTContainsCh) PROJECT_OUT chnumber
-- so it's a view
-- nb its pkgid:chtypeid many:many nature follows from its definition
我会让你想想“可以”有什么贡献。是不是应该说一个实体也可以和0个其他实体关联?
我遇到的问题是程序包和频道之间的问题。一世
似乎找不到在两者之间起作用的关联表。
你的事情倒退了。首先找到语句模板。每个模板都提供一个表格。模板加上情况给出了约束。 (然后我们可能会合并、分解和/或删除表和/或约束。)
PS:一个节目有一个频道类型。所以大概它播放的频道属于那种频道类型,等等。你的问题没有提到节目“拥有(允许的?)”频道类型意味着什么的这个方面,对于一个节目“到(被允许?)在“频道上播放”或频道类型或节目包“包含(允许?)”频道。