数据库设计问题(条件必填字段)

时间:2009-11-06 20:29:43

标签: mysql database database-design

只是寻找一些关于如何做到这一点的意见/想法。

我正在建立一个外联网系统,用户手动添加用户(没有人能够“注册”自己)。当他们添加时,只输入少量的强制数据(姓名,电子邮件,密码),然后通过电子邮件发送他们的登录信息,当他们第一次访问系统时,会要求他们提供必须在给出之前必须完成的其他强制性详细信息访问完整网站。

我可以想到在DB中定义它的三种方法:

  1. 将所有必填字段设置为NOT NULL 在DB中,输入空字符串 对于所有“有条件的 创建时的强制“字段 用户(我不喜欢这个,似乎 哈克)

  2. 仅设置初始必填项 数据库中的字段为NOT NULL,和 为所有输入NULL “有条件强制”字段 在创建用户时(我不喜欢 这,虽然技术上是正确的,但是 架构不会反映真实 世界用户实体,所有的 数据是强制性的)

  3. 有两个表,一个用于新用户, 和一个完整的用户(起初 这看起来似乎是最好的 选项,但其他表需要 有关系指向 用户表,这会

  4. 有什么想法吗? 干杯,
    千斤顶

    修改

    所以看起来数字2将是最好的方法,有一个字段定义记录的状态(新的/完整的)并检查约束或触发器来检查所有“可选的强制”字段是否具有值。我猜测检查约束是最合适的选择,但我会给你一个去看看哪个效果最好。感谢。

4 个答案:

答案 0 :(得分:1)

我会选择一个表的实用方法,并使用状态列来指示用户是'privisional'还是'确认'(比如说),并检查约束以确保当所有必需信息都存在时状态已“确认”。

你是否应该使用空值或空字符串是我没有太多意见,因为我已经习惯了Oracle,它无法区分这两者!

答案 1 :(得分:1)

如果您尝试第二个但添加一个字段以显示状态为初始化,完全注册,那该怎么办?然后字段可以为null,但是当值更改为完全注册时,触发器可以确保填写所有必需字段。

答案 2 :(得分:0)

我会选择选项3.这假设系统不会对“新用户”做任何事情,除非等待他们转换为“完整用户”。

拥有一个包含最少必填字段数量的newusers表。当用户转换为完整用户时,而不是在创建新用户时,设置与其他表的任何关系。这将消除与新用户和用户表建立关系的需要(用户表只需要它们)。

答案 3 :(得分:0)

有点hacky但你可以为新用户提供一个表,为注册用户提供一个表。一旦用户注册,他们将从新用户表中删除,所有数据都在注册用户表中。要访问完整站点,必须在注册用户表中。新用户表仅用于允许访问注册页面。