Я хочу создать таблицу в MS SQL Server 2005 для записи сведений о некоторых системных операциях. Как вы можете видеть из нижеприведенного дизайна таблицы, каждый столбец, кроме Details
, не имеет значения NULL.
CREATE TABLE [Log]
(
[LogID] [int] IDENTITY(1,1) NOT NULL,
[ActionID] [int] NOT NULL,
[SystemID] [int] NOT NULL,
[UserID] [int] NOT NULL,
[LoggedOn] [datetime] NOT NULL,
[Details] [varchar](max) NULL
)
Поскольку столбец Details
не всегда будет иметь в нем данные. Является ли более эффективным сохранение этого столбца в отдельной таблице и предоставление ссылки на него вместо этого?
CREATE TABLE [Log]
(
[LogID] [int] IDENTITY(1,1) NOT NULL,
[ActionID] [int] NOT NULL,
[SystemID] [int] NOT NULL,
[UserID] [int] NOT NULL,
[LoggedOn] [datetime] NOT NULL,
[DetailID] [int] NULL
)
CREATE TABLE [Detail]
(
[DetailID] [int] IDENTITY(1,1) NOT NULL,
[Details] [varchar](max) NOT NULL
)
Для меньшего типа данных я бы не стал его рассматривать, но для varchar(max)
делает ли это помощь, чтобы уменьшить размер таблицы? Или я просто пытаюсь извлечь умную базу данных и ничего не добиваться?