表属性数据类型

时间:2019-06-25 03:36:47

标签: sql oracle

我需要帮助来选择SQL表中的数据类型。 该属性需要采用4个选项,例如,我想创建具有属性status的表,但我不知道它必须是哪种数据类型,以及如何实现选择的4个选项。

CREATE TABLE status (
   USERNAME type_of_data (options: offline, online, away, busy)
);

我无法为每个选项再创建4个表。
有可能吗?如果没有,哪种更好的方法呢?

Thx

3 个答案:

答案 0 :(得分:2)

您可以为状态定义一个表,该表具有2列(ID(int),Status(VARCHAR(100)))以(离线,在线,离开,忙碌)填充您的表行,因此您可以将其ID用作外部键入其他表。

应该是:

  CREATE TABLE [dbo].[TBL_STATUS](
     [ID] [int] IDENTITY(1,1) NOT NULL,
     [STATUS] [nvarchar](100) NOT NULL,
     CONSTRAINT [PK_TBL_STATUS] PRIMARY KEY CLUSTERED 
  (
    [ID] ASC
   )
    ) ON [PRIMARY]
GO

CREATE TABLE [dbo].[TBL_USER](
[ID] [int] IDENTITY(1,1) NOT NULL,
[USER_ID] [int] NULL,
[USERNAME] [nvarchar](200) NULL,
[STATUS_ID] [int] NULL,
 CONSTRAINT [PK_TBL_USER] PRIMARY KEY CLUSTERED 
(
[ID] ASC
)
) ON [PRIMARY]

 GO

 ALTER TABLE [dbo].[TBL_USER]  WITH CHECK ADD  CONSTRAINT   [FK_TBL_USER_TBL_STATUS] FOREIGN KEY([STATUS_ID])
REFERENCES [dbo].[TBL_STATUS] ([ID])
GO

ALTER TABLE [dbo].[TBL_USER] CHECK CONSTRAINT [FK_TBL_USER_TBL_STATUS]
GO

答案 1 :(得分:1)

似乎您需要检查约束:

CREATE TABLE status 
( 
   USERNAME     varchar(100) not null, 
   type_of_data varchar(20) not null, 
   constraint check_type check (type_of_data in ('offline', 'online', 'away', 'busy'))
);

上面创建了一个包含两列的表。一个名为username,没有任何限制(强制性规定除外),另一个名为type_of_data

您可以在type_of_data列中输入的值限于'offline''online''away''busy'

您还应该找到该表的主键。也许它是username,或者可能需要向其添加一个identity列以生成主键。

答案 2 :(得分:0)

您可以使用VARCHAR中的VARCHAR2oracle数据类型来存储状态列。

根据DOCS

  

VARCHAR2数据类型存储长度可变的字符串。什么时候   您创建带有VARCHAR2列的表,并指定一个最大值   介于1到4000字节之间的字符串长度(以字节或字符为单位)   VARCHAR2列