0

我正在为学习者管理系统设计一个模式。

我目前有LearnerDetails表,其中存储以下信息类别。- 登录用户帐户详细信息 - 联系方式和家庭住址 - 学习者的居住相关信息,包括国籍信息、当前留在英国的签证详细信息等 - 学习者当前的国家福利相关信息 - 有关学习者当前就业状态的详细信息

我遇到的问题是,当所有这些信息都表示在一个表中时,列数超过 70 列。

我可以做的一件事是,我可以将信息隔离到表示上述类别的不同表中,并将这些表与它们的父表 LearnerDetails 关联为 1:1 关系。

我想知道这是否是推荐的方法。在我看来,1:1 的关系将代表一个过度规范化的数据库。但如果我不这样做,就会导致有一个巨大的水平表作为我的LearnerDetails表。

如果您能告诉我您的意见/建议,我们将不胜感激。

4

3 回答 3

2

只要您有 5NF 或至少 3NF,表中的许多列本质上没有任何问题。

但是,有很多例子表明垂直分区 (1::1) 是有意义的——看看一个类似的问题

于 2011-08-30T11:56:06.480 回答
2

列有多宽?如果您的记录比页面大小更宽,那么拥有一个宽表是一个等待发生的性能问题。

地址通常不是与人的一对一关系。是的,大多数人只有一个,但并非所有人都如此。学生们有时与他们离异的父母一起兼职。我建议将地址分开。如果您存储电话号码,那么这两个通常不是 1-1 关系。您可能有手机、传真号码、公司号码和家庭电话(固定电话)号码。任何很有可能最终需要处于一对多关系中的东西都应该从一开始就分开。

如果您确实将表分开并希望强制执行一对一关系,您可以使用父表中的 id 作为子表中的 PK 或为该表设置不同的 Pk 并设置唯一索引对于 FK 领域。不要在没有办法在数据库中强制执行的情况下建立一对一的关系。

于 2011-08-30T13:22:18.207 回答
1

如果规范化需要的话,拥有 70 列或更多列完全没有问题。您没有提及您使用哪些 rdbms,但大多数支持至少 255 个字段。

于 2011-08-30T08:57:19.163 回答