在mysql中,我们可以使用set datatype为任何特定行的每一列选择多个值,如下所示:
CREATE TABLE `staff` ( `StaffID` int(5) NOT NULL AUTO_INCREMENT,
`Availability` set('Mon','Tue','Wed','Thur','Fri','SatAM','SatPM','Sun') DEFAULT NULL,
PRIMARY KEY (`StaffID`))
那我就可以了,
INSERT INTO `staff` (`Availability`) VALUES ('Tue,Wed,SatPM')
我试着到处找,但是找不到任何合适的数据类型来存储多个选定的选项,就像上面在oracle中一样。oracle文档似乎显示mysql集没有其他选择,但我不敢相信他们没有!有人能帮我澄清一下吗?
oracle文档参考原始链接
2条答案
按热度按时间zdwk9cvp1#
在mysql中,set数据类型是一种命名的位Map数据类型。oracle没有这样的数据类型,但如果您确实希望,可以通过使用受约束的整数数据类型来模拟它:
您必须记住或构建一个函数来Map位图值和天数。
另一种选择是使用查找表:
avkwfej42#
sentinel的答案(我投了赞成票)解决了这个问题。
但是,我将后退一步,并以“如何在oracle中表示这种类型的数据”来解决这个问题,建议解决这个问题的更好方法是不模拟set数据类型。
set数据类型可能违反了第一个范式。这不一定是对其用法的道德判断;这些解决方案使某些查询更容易和/或更高效,而其他查询更困难和/或效率更低。但是标准形式是建立在多年的rdbms经验基础上的。对于广泛的应用,遵循前三个范式是避免平衡问题的好方法。
可以在oracle中实现的规范化解决方案(无需跳转来模拟位字段枚举)可能包括
Staff
带有id的表AvailabilityCode
表中的每个单独值都有一行,以及StaffAvailability
,两者之间的交叉引用,每个要与人员id关联的availabilitycode值对应一行。