关系数据库模式中属性前#的含义及#Card、#Spots的意义问询
问题背景
给出的关系模式如下:
Umbrella(ID, Lido, Cost, Type)
Lido(ID, Name, #Spots, Manager)
Manager(FiscalCode, Name, Surname)
Client(#Card, Name, Surname)
Prenotation(ClientCard, UmbrellaID, Date, TotalCost)
#符号的隐含意义
首先明确:数据库建模领域里#并没有通用的标准语法定义,这是建模者自定义的标记约定。结合你给出的模式逻辑(搭配*标记外键的规律),它的作用是标识具有唯一性约束的属性,或是业务层面的主键/自然键,具体到两个属性:
#Card(Client表)
这是客户的卡号,被标记#说明它是该表的业务主键(自然键)——在业务规则里,每个客户的卡号是唯一的,能用来精准区分不同客户,和Manager表用FiscalCode(天然唯一的税号)作为主键的逻辑完全一致。#Spots(Lido表)
Spots应该指浴场(Lido)的可用泊位/场地数量,被标记#说明这个属性带有唯一性约束,即每个浴场的泊位数量是唯一的;或者也可能是建模者用#标识这是一个核心业务属性(不可为空且有严格业务规则约束)。结合整体模式的标记习惯(#都指向唯一标识类属性),前者的可能性更高。
另外补充:模式里的*明显是标记外键(比如Umbrella的*Lido*关联Lido的ID,Prenotation的*ClientCard*关联Client的Card),所以#和*是建模者用来区分「唯一键/业务主键」和「外键」的自定义标记。
内容的提问来源于stack exchange,提问作者Rbn

