2013-07-19 2 views
1

Мне было предложено создать таблицу в SQL и я не уверен в одном из полей таблицы.SQL Lookup List

меня попросили создать таблицу со следующей информацией:

  • Имя
  • Фамилия
  • Три Адресные линии
  • Мобильный телефон
  • Домашний телефон
  • Дата Модифицировано
  • Категория лица
  • Комментарий

Это описание для человека Категория:

лицо Категория: Простой список просмотра, содержащихся в базе данных (ID и описание), можно предварительно заполнить эти данные из скрипт, нет необходимости редактировать и обновлять приложение VB. Описание категорий: Клиент, Работник, Эксперт и Неизвестный.

Может кто-нибудь, пожалуйста, объясните мне, что нужно здесь?

UPDATE

Вот мой текущий сценарий для таблицы Person:

CREATE TABLE db_person.Person 
(
PersonID NUMBER NOT NULL, 
FirstName varchar(50) NOT NULL, 
LastName varchar(50) NOT NULL, 
AddressLine1 varchar(50), 
AddressLine2 varchar(50), 
AddressLine3 varchar(50), 
MobilePhone varchar(20), 
HomePhone varchar(20), 
DateModified DATE, 
PersonCategory varchar(50), 
Comment varchar(8000), 
PRIMARY KEY (PersonID) 
) 

Могу ли я иметь некоторую помощь, чтобы создать список Уточняющий для PersonCategory и связать его в лицо таблице?

+0

Из того, что я могу собрать это вам нужно создать таблицу базы данных с теми полями, которые будут заполнены данными из сценария. –

ответ

0

Это означает, что вам нужно создать другую таблицу для категории Person. Таким образом, отношение «один ко многим» между двумя таблицами.

Кроме того, поскольку описание человека ограничено либо Клиентом, Работником, Ассистентом или Неизвестным, вы должны справиться с этим в создании сценария, используя ключевое слово «ПРОВЕРКА».

т.е.

CHECK (Description in ("Client", "Worker", "Assessor", "Unknown")) 
+0

Не могли бы вы объяснить этот код? Указывает ли код, что значение Описание должно быть либо «Клиент», «Рабочий», «Эксперт» или «Неизвестно»? Могу ли я поместить этот код в хранимую процедуру для добавления значений в таблицу Person, чтобы гарантировать, что PersonCategory должна быть одним из этих значений? –

+0

Да, действительно. Таким образом, убедитесь, что столбец Описание содержит «Клиент», «Рабочий», «Ассемент» или «Неизвестный». ничего больше. Даже если вы попытаетесь сделать вставку непосредственно в базу данных без использования какого-либо программного обеспечения. – TheEwook

0

Прежде всего, вы должны создать таблицу Категории поиска. Вы можете создать его с помощью сценария, как это:

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [Categories](
    [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL, 
    [Description] [varchar](50) NOT NULL, 
CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING ON 
GO 

ALTER TABLE [Categories] ADD CONSTRAINT [DF_Categories_Id] DEFAULT (newid()) FOR [Id] 
GO 

и заполнить его с 4 описаниями:

INSERT INTO Categories ([Description]) 
VALUES ('Client') 

INSERT INTO Categories ([Description]) 
VALUES ('Worker') 

INSERT INTO Categories ([Description]) 
VALUES ('Assessor') 

INSERT INTO Categories ([Description]) 
VALUES ('Unknown') 

После этого, вы должны создать таблицу Persons, с ограничением с таблицей Категории:

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [Persons](
    [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL, 
    [IdCategory] [uniqueidentifier] NOT NULL, 
    [FirstName] [varchar](50) NOT NULL, 
    [LastName] [varchar](50) NOT NULL, 
    [FirstAddress] [varchar](250) NULL, 
    [SecondAddress] [varchar](250) NULL, 
    [ThirdAddress] [varchar](250) NULL, 
    [HomePhone] [varchar](50) NULL, 
    [MobilePhone] [varchar](50) NULL, 
    [Modified] [datetime] NOT NULL, 
    [Comment] [varchar](500) NULL, 
CONSTRAINT [PK_Persons] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

SET ANSI_PADDING ON 
GO 

ALTER TABLE [Persons] ADD CONSTRAINT [DF_Persons_Id] DEFAULT (newid()) FOR [Id] 
GO 

ALTER TABLE [Persons] WITH CHECK ADD CONSTRAINT [FK_Persons_Categories] FOREIGN KEY([IdCategory]) 
REFERENCES [Categories] ([Id]) 
GO 

ALTER TABLE [Persons] CHECK CONSTRAINT [FK_Persons_Categories] 
GO 

Теперь у вас есть две таблицы :)

Эти сценарии выполняются уплотнительные n Microsoft SQL Server.

PS: Лучшая практика, чтобы сделать еще одну таблицу для нескольких адресов и нескольких телефонов;)

Чтобы получить данные с помощью SELECT, вы можете сделать:

SELECT FirstName, LastName, Description AS Category 
FROM Persons INNER JOIN 
Categories ON Categories.Id = Persons.IdCategory 

Если вы используете номер для идентификаторы, измените тип данных IdCategory в NUMBER. После этого StoredProcedure может быть как:

CREATE PROCEDURE [AddPerson] 
(
@Category varchar(50), 
@FirstName varchar(50), 
@LastName varchar(50), 
@FirstAddress varchar(250) = NULL, 
@SecondAddress varchar(250) = NULL, 
@ThirdAddress varchar(250) = NULL, 
@HomePhone varchar(50) = NULL, 
@MobilePhone varchar(50) = NULL, 
@Comment varchar(500) = NULL 
) 
AS BEGIN 
Declare @idCategory NUMBER 
Set @idCategory = SELECT Id FROM Categories WHERE Description = Category 

INSERT INTO Persons ([IdCategory], [FirstName], [LastName], 
    [FirstAddress], 
    [SecondAddress], 
    [ThirdAddress], 
    [HomePhone], 
    [MobilePhone], 
    [Modified], 
    [Comment]) 
VALUES (@idCategory, 
    @FirstName, 
    @LastName, 
    @FirstAddress, 
    @SecondAddress, 
    @ThirdAddress, 
    @HomePhone, 
    GETDATE(), 
    @MobilePhone, 
    @Comment) 

END 

GO 

Я извиняюсь, если этот код содержит некоторые ошибки, но я написал его с помощью блокнота :)

+0

Спасибо. Я хочу использовать код хранимой процедуры для вставки значений в таблицу лиц, какие значения я использую для PersonCategory? Какое имя я использую, и какой тип данных? –

+0

Я отредактировал свой ответ с сохраненной процедурой, потому что я не мог писать слишком символов в этом комментарии;) Проверьте это :) – Alesanco