Quick and easy:
CREATE TABLE [dbo].[Lists]( [ListId] [int] IDENTITY(1,1) NOT NULL, [ListName] [varchar](100) NOT NULL, --these could be associated with lists or options, wasn't specified [AssociatedDept] [int] NULL, [Other2] [nchar](10) NULL, [Other3] [nchar](10) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[Options]( [OptionId] [int] IDENTITY(1,1) NOT NULL, [ListId] [int] NOT NULL, [DisplayValue] [varchar](100) NOT NULL, [Value] [varchar](100) NULL, [OptionOrder] [tinyint] NULL, --these could be associated with lists or options, wasn't specified [AssociatedDept] [int] NULL, [Other2] [nchar](10) NULL, [Other3] [nchar](10) NULL ) ON [PRIMARY]
Get content using
select Options.* --or a subset from Options as o join Lists as l on l.ListId=o.ListId and l.ListName = 'nameOfList' order by o.OptionOrder
Optimized (potentially: depends on your data) (especially if one parameter appears in several lists)
CREATE TABLE [dbo].[Lists]( [ListId] [int] IDENTITY(1,1) NOT NULL, [ListName] [varchar](100) NOT NULL, --these could be associated with lists or options, wasn't specified [AssociatedDept] [int] NULL, [Other2] [nchar](10) NULL, [Other3] [nchar](10) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[Options]( [OptionId] [int] IDENTITY(1,1) NOT NULL, [DisplayValue] [varchar](100) NOT NULL, [Value] [varchar](100) NULL, --these could be associated with lists or options, wasn't specified [AssociatedDept] [int] NULL, [Other2] [nchar](10) NULL, [Other3] [nchar](10) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[ListOptions]( [OptionId] [int] NOT NULL, [ListId] [int] NOT NULL, [OptionOrder] [tinyint] NULL, --these could be associated with lists or options, wasn't specified [AssociatedDept] [int] NULL, [Other2] [nchar](10) NULL, [Other3] [nchar](10) NULL )
Get content using
select Options.* --or a subset from Options as o join ListOptions as lo on lo.OptionId=o.OptionId join Lists as l on l.ListId=lo.ListId and l.ListName = 'nameOfList' order by lo.OptionOrder
In any case, you want to index the foreign key columns.