将整数作为字符串存储在表中是否值得,因为它非常适合业务逻辑



在我的应用程序中有两种类型的用户,匿名用户和经过身份验证的用户。经过身份验证的用户id为integer,匿名用户id为uuid。有一个表Item其存储用户所拥有的项目。关于如何在一张表中存储不同的id,我有两个想法首先创建列user_id作为字符串,并将两个用户ID存储在一列中:

Item
+---------+----------------------------------------+----------+
| item_id |                user_id                 | quantity |
+---------+----------------------------------------+----------+
|      1  | '1'                                    |        2 |
|      2  | 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' |        3 |
|      3  | '2'                                    |        1 |
+---------+----------------------------------------+----------+

其次创建两个不同的列user_id(整数(和anon_user_uuid(uuid(,

Item 
+---------+---------+----------------------------------------+----------+
| item_id | user_id |             anon_user_uuid             | quantity |
+---------+---------+----------------------------------------+----------+
|      1  | 1       | null                                   |        2 |
|      2  | null    | 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' |        3 |
|      3  | 2       | null                                   |        1 |
+---------+---------+----------------------------------------+----------+

在第一种情况下,我需要编写四个查询来检索、更新、创建和删除项目。

在第二节中,我需要为crud操作编写八个查询。

所以,我的问题是,像第一种情况(上面的第一个表(一样进行设计可以吗?

看起来有两种完全不同类型的值。在这种情况下,两列是合适的。

将它们作为一列的原因是,您可以设置外键或其他关系,但如果其中一些不能像那样匹配,则这是不可能的。

为了一致性,您可能希望给每个用户一个";匿名的";ID并在内部使用。其中一些可能会映射到注册用户,其他可能不会。

也可以只为匿名用户创建一个用户记录,如果用户在事后注册,只需填充其他字段并将状态更改为";注册";。

相关内容

最新更新