我有两张桌子:
在mysql MYISAM的同一个表中,id和name字段都可以是唯一的吗?
如果以上是可行的,我正在考虑将表格更改为:
...因为它帮助我不要在演示文稿中对功能进行额外的查询,因为前端用户无法处理ID。
答案 0 :(得分:8)
当然,你可以让其中一个为PRIMARY而另一个为UNIQUE。或者两者都是UNIQUE。或者一个PRIMARY和四个UNIQUE,如果你喜欢
答案 1 :(得分:5)
是的,您可以为主键以外的列定义UNIQUE约束,以确保数据在行之间是唯一的。这意味着该列中的值只能 一次 - 任何添加重复项的尝试都将导致唯一的约束违规错误。
我正在考虑将FEATURES表更改为功能[id(PK),name,roomtypeNAME],因为它帮助我不要在演示中对功能进行额外查询,因为前端用户无法处理ID。 / p>
有两个问题:
ROOM_TYPE_NAME
上的唯一约束不起作用 - 您将拥有给定房间类型的多个实例,并且设计了一个唯一约束来阻止它。ROOM_TYPES
表的外键,您可能会冒“Double”,“double”,“dOUBle”这样的值。为了您的数据,我建议坚持使用您的原始设计;您的应用程序将房间类型转换为各自的ROOM_TYPE
记录,同时用户界面使其显示。
答案 2 :(得分:0)
我希望如此,否则MySQL不符合SQL标准。您只能拥有一个主键,但可以将其他列标记为唯一。
在SQL中,这是通过以下方式实现的:
create table tbl (
colpk char(10) primary key,
coluniq char(10) unique,
colother char(10)
);
还有其他方法(特别是使用多部分键),但这是一个简单的解决方案。
答案 3 :(得分:0)
是的,你可以。
另请注意,MySQL允许唯一列中的NULL值,而作为主键的列不能具有NULL值。
答案 4 :(得分:0)
再次感谢您提供非常有用的答案。
1 roomType可能有很多功能
可以为许多房型分配1个功能
那么我有什么样的关系? M:N?
如果是,我看到的解决方案是将表结构更改为 roomTypes [ID,...,featuresIDs] feature [id(PK),name,roomtypeIDs]用逗号分隔的多个roomTypesID?
答案 5 :(得分:0)
1 RoomType可能有许多功能
1功能可以分配给许多RoomTypes
那么我有什么样的关系? M:N?
你有一个多对多的关系,必须用额外的表来表示 该关系表将有两个字段:RoomTypes的PK和特征的PK 关系表的PK将由这两个字段组成。 如果这是有用的,您可以添加额外的字段,如数量。
我想鼓励您阅读有关数据库规范化的内容,这是为关系数据库创建正确设计的过程。您可以谷歌,或最终查看here(这里有很多书籍/网页)