如何创建n元数据库关系?基于无语义ER图的Schema实现疑问
问题判断与解答
1. 你对ER图含义的4个理解判断如下:
- 第1、2点表述完全正确:该ER图中abacot和gimble在kiming关联中为一一映射约束,单个abacot最多只能参与一次kiming关联、绑定唯一的gimble,反之亦然;二者绑定的kiming关联可对应多个dord和wabe。
- 第3点表述正确:kiming关联和dord、wabe均为多对多参与关系,单个kiming实例可以同时关联多个dord、多个wabe,也可以只关联其中一类的多个实例。
- 第4点不能仅用1张表实现,你预设的3张表(kiming主表+两个联结表)是该关联关系的最小必要实现,额外还需要补充abacot、gimble、dord、wabe四个实体的基础表。
2. 仅靠该ER图能否生成对应数据库schema?
如果该ER图遵循标准的ER建模符号规范(比如箭头表示1对1函数约束、无箭头表示多值约束,标注无歧义),是完全可以直接推导生成schema的,这也是教材习题只给ER图作为唯一依据的原因。
3. 建表语句疑问解答
UNIQUE (abacot_id)和UNIQUE (gimble_id)两个约束是必要的,正好对应abacot、gimble最多参与一次kiming关联的规则,避免同一个abacot或gimble重复出现在多条kiming记录中。如果你不想用代理主键kiming_id,也可以直接把(abacot_id, gimble_id)设为kiming表的联合主键,效果和单独加两个唯一约束+代理主键是一致的。kiming_wabe和kiming_dord两张联结表都是必须的,因为kiming和wabe、kiming和dord都是多对多关系,无法将多值的wabe_id、dord_id存入kiming主表的单值字段,否则会出现数据冗余、插入/删除/更新异常。
内容的提问来源于stack exchange,提问作者Joe DiNottra
相关产品推荐
相关产品推荐

