首页 > 解决方案 > 是否值得将整数作为字符串存储在表中,因为它非常适合业务逻辑?

问题描述

在我的应用程序中,有两种类型的用户,匿名用户和经过身份验证的用户。经过身份验证的用户使用整数作为 id,匿名用户使用 uuid 作为 id。有一个表 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 操作编写 8 个查询。

所以我的问题是,在第一种情况下(上面的第一个表)进行设计是否可以?

标签: mysqldatabasedatabase-design

解决方案


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

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

为了保持一致性,您可能希望为每个用户提供一个“匿名”ID,然后在内部使用它。其中一些可能映射到注册用户,另一些可能不会。

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


推荐阅读