使用ID nr:s代替VARCHARS作为外键是否更好? 使用ID nr:s isntead of VARCHARS作为主键是否更好? ID nr我的意思是int!

This is what I have now:

category table:
cat_id ( INT ) (PK)
cat_name (VARCHAR)

category options table:
option_id ( INT ) (PK)
car_id ( INT ) (FK)
option_name ( VARCHAR ) 

I COULD HAVE THIS I THINK:

category table:
cat_name (VARCHAR) (PK)

category options table:
cat_name ( VARCHAR ) (FK)
option_name ( VARCHAR ) ( PK )

还是我现在的 idea 完全错了?

推荐答案

将VARCHAR用于任何密钥的问题是它们可以保留空格.空白由任何非屏幕可读字符组成,如空格、制表符、回车等.使用VARCHAR作为键可能会使您的工作变得困难,因为当您开始查找为什么表在键的末尾没有返回带有额外空格的记录时.

当然,您CAN使用了VARCHAR,但是您必须非常小心地处理输入和输出.它们还会占用更多空间,并且在执行查询时可能会更慢.

整数类型有一个包含10个有效字符(0,1,2,3,4,5,6,7,8,9)的小列表.它们是一种更好的 keys 解决方案.

如果您希望获得更快的查找优势,则可以始终使用基于整数的键,并将VARCHAR用作唯一值.

Database相关问答推荐

如何在维护数据库模型的同时从Firestore中删除文档?

重新运行后未找到 Taipy 场景

使用python为组中的每个元素添加一个序列号

我应该为 Realm 中的每个实体定义主键吗?

Cassandra 还是 MySQL/PostgreSQL?

数据库供应商如何实现事务?

Laravel 5 从 URL 获取 ID

在 SQL SERVER 中监视 SQL 查询的进度

应用程序用户应该是数据库用户吗?

Redis: Get key and value on expiration

EF4 代码优先导致 InvalidOperationException

Django:将博客条目查看次数加一,这有效率吗?

我在哪里可以获得所有国家/地区的邮政编码?

从原始物理文件中恢复 postgreSQL 数据库

Python中的内存数据库

使用批处理文件执行一组 SQL 查询?

如何在数据库中获取原始的created_at值(不是转换为 ActiveSupport::TimeWithZone 的对象)

设计数据库来保存不同的元数据信息

使用 Django 的复合/复合主/唯一键

我将如何为读写操作实现单独的数据库?