我有一个表DEFINITIONS,我将xml定义存储在我的组件中(表单,布局,网格......) 然后我有详细的表PROFILES(1:M关系),我存储我的用户配置文件,如果有的话。仅当组件的类型为grid时才允许此用户配置文件。
到目前为止,我已经创建了表DEFINITIONS和与DEFINITIONS表1:M关系的表PROFILES。
我只是想知道是否有更适合这种情况的设计。我担心数据的完整性。 PROFILES FK字段中可能还有其他组件(表单,布局)PK。
这是一个有充分根据的关注吗?
答案 0 :(得分:1)
不是将所有定义存储在一个表中而只允许PROFILES
链接到网格类型,为什么不将不同的定义分离到自己的表中呢?
然后您将拥有表Form_Definitons
,Layout_Definitions
,Grid_Definitions
等等,并且您只能从Profiles
创建与Grid_Definitions
表的关系表
如果要检索所有定义,可以创建一个视图以将所有xxx_Definition
表合并在一起。
答案 1 :(得分:1)
为了完整性,您可以在此处使用复合FK + CHECK约束:
CREATE TABLE Profiles(
definition_id INTEGER,
component_type INTEGER DEFAULT 1 CHECK( component_type = 1 )
);
ALTER TABLE Profiles ADD (
CONSTRAINT Profiles_FK_Definition
FOREIGN KEY (definition_id, component_type)
REFERENCES Definitions(definition_id, component_type)
);
理想情况下,如果它不会扼杀性能,我会尽一切努力保持完整性 实际上,如果用户不能以另一种方式访问底层数据库,但是你的用户界面,我不会太在意