数据库设计问题

时间:2010-10-27 09:14:55

标签: sql database-design

我有一个表DEFINITIONS,我将xml定义存储在我的组件中(表单,布局,网格......) 然后我有详细的表PROFILES(1:M关系),我存储我的用户配置文件,如果有的话。仅当组件的类型为grid时才允许此用户配置文件。

到目前为止,我已经创建了表DEFINITIONS和与DEFINITIONS表1:M关系的表PROFILES。

我只是想知道是否有更适合这种情况的设计。我担心数据的完整性。 PROFILES FK字段中可能还有其他组件(表单,布局)PK。

这是一个有充分根据的关注吗?

2 个答案:

答案 0 :(得分:1)

不是将所有定义存储在一个表中而只允许PROFILES链接到网格类型,为什么不将不同的定义分离到自己的表中呢?

然后您将拥有表Form_DefinitonsLayout_DefinitionsGrid_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)
);

理想情况下,如果它不会扼杀性能,我会尽一切努力保持完整性 实际上,如果用户不能以另一种方式访问​​底层数据库,但是你的用户界面,我不会太在意