【发布时间】:2019-05-02 18:34:10
【问题描述】:
在 MySQL 中,我们可以使用 Set 数据类型为任何特定行的每一列选择多个值,如下所示:
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 集的替代品,但我不敢相信他们没有它!那么有人可以帮我澄清一下吗?
【问题讨论】:
-
仅仅因为mysql有一个特性,并不意味着它是一个好主意/rdbms应该有的东西。您可以使用字符串、xml、json 或将有效的多:多关系分解为一组表,这些表通过“staff_availableday”表将“staff”与“availableday”表相关联。在规范化良好的数据库中,只有后者才是真正正确的
-
我认为您需要在 Oracle 中设计一个不同的表结构。
-
除了添加到@CaiusJard 的评论中。如果无法使用 InnoDB 的在线 DDL,更改 MySQL 的 SET 数据类型选项很可能需要完整的表重建和/或表锁定。
-
您所描述的内容听起来与 Oracle SQL 中的
nested table数据类型隐约相似。虽然有一些差异。首先,Oracle SQL 中没有通用的嵌套表类型;你必须首先CREATE TYPE来命名一个特定的嵌套表数据类型,然后你可以在你的CREATE TABLE语句中使用它,你可以使用构造函数来INSERT值。然后,嵌套表是多集(它们允许重复) - 不确定set数据类型是否存在(可能不是)。 -
最后,
set似乎将值限制在CREATE TABLE中声明的值;不确定 Oracle 中是否存在等效的东西,但如果存在,很可能是通过约束完成的。
标签: mysql sql database oracle oracle12c