我有一个用于存储优惠券/折扣的表,并且我想将coupon_code列用作主键,即VARCHAR
。
我的理由是,每个优惠券都将具有唯一的代码,而我将要运行的唯一命令是 SELECT ... FROM ... WHERE coupon_code='..'
我不会进行任何联接或索引编制,并且我看不到该表中有超过几百个条目。
在我看来,这可以,但是我不知道是否有任何我想念的东西。
从某种意义上说,您当然可以,您的RDBMS将允许您这样做。这个问题的答案,你是否没有问题 应该
做到这一点是不同的,虽然:在大多数情况下,有你的数据库系统之外的含义值应该 不 被选择为一个主键。
如果您知道该值在您正在建模的系统中是唯一的,则可以向表中添加唯一索引或唯一约束。但是,您的主键通常应该是一些“无意义”的值,例如自动递增的数字或GUID。
这样做的理由很简单:确实发生了数据输入错误和对似乎不可更改的事物的不频繁更改。它们变得很难固定在用作主键的值上。
我有两张桌子: 用户(用户名、密码) 配置文件(profileId,gender,dateofbirding,...) 目前我正在使用这种方法:每个Profile记录都有一个名为“userid”的字段作为外键,它链接到用户表。当用户注册时,他的配置文件记录将自动创建。 我对我朋友的建议感到困惑:将“userid”字段作为外部和主键,并删除“profileid”字段。哪种方法更好?
问题内容: 如果不需要主键,是否不应该将主键添加到数据库中? 问题答案: 主键唯一地标识表中的一行。 它被索引和/或群集的事实是一个物理实现问题,与逻辑设计无关。 您需要一张桌子才能使它有意义。
问题内容: 我需要一个简单的表,其中包含MySQL中的用户名和密码字段。由于用户名必须唯一,因此对我来说,将它们设置为主键是有意义的。 使用还是作为主键更好? 问题答案: 可能还只是使用用户ID索引,所以与vs / char / varchar相比,连接要快得多。如果您不小心扩展了架构的功能,那么现在添加所需的两秒钟时间可以为您节省很多时间。 要考虑的一些陷阱: 说我们在将来的日期添加一些表,如果
问题内容: 我想知道我能否以某种方式使用x,y对作为字典的键 但是我得到了错误: 和错误: 那么..我们怎样才能使其符合标准? 问题答案: 的定义是,即密钥的类型必须符合协议。但是语言指南告诉我们协议可以被类,结构和枚举所采用,即不能被元组所采用。因此,元组不能用作键。 一种解决方法是定义一个包含两个Ints的可哈希结构类型(或您要放入元组的任何内容)。
问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合:
如何将复合主键用作外键?看来我的尝试没有成功。