Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
изучаю sql запутался с внешними ключами кому не сложно подсажите
создаю таблицу
create table firm
(id int identity primary key,
fname varchar(15) not null )

создаю таблицу2
create table firm2
(id int identity foreign key references firm (id),
lname varchar(20) not null)

но почему когда id не уникальный в таблице 2 я же иму поставил внешний ключ.
как правильно сделать чтоб id был уникальным в таблице 2
7 авг 09, 08:56    [7509013]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
а кто вам говорил что поле которому прикреплено внешний ключ обязательно должен быть уникальным???


----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 09:00    [7509023]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Для уникальности существуют такие чудеса, как UNIQUE INDEX, CONSTRAINT UNIQUE, PRIMARY KEY.
А FOREIGN KEY не для этого. Он не разрешает полям в одной таблице иметь значения, которых нет
в соответствующих полях другой таблицы. За исключением значения NULL (если оно не запрещено
для этого поля, разумеется).
7 авг 09, 09:06    [7509037]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3197
Alexey_Cher
как правильно сделать чтоб id был уникальным в таблице 2
Положить на него, помимо foreign key, еще и primary key / unique constraint.
Внешний ключ всего лишь гарантирует целостность данных между таблицами, уникальность ему по барабану.
7 авг 09, 09:07    [7509041]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
автор
как правильно сделать чтоб id был уникальным в таблице 2

CREATE TABLE [dbo].[table2] (
  [id] int NOT NULL UNIQUE
)
GO


----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 09:08    [7509044]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Ramin
автор
как правильно сделать чтоб id был уникальным в таблице 2

CREATE TABLE [dbo].[table2] (
  [id] int NOT NULL UNIQUE
)
GO


----
www.hramin.jino-net.ru
Картинка с другого сайта.
Да уж сразу PRIMARY KEY тогда уж

Кстати, советую давать констрейнтам свои осмысленные имена,
а не полагаться на сервер в этом отношении.
Это поможет в дальнейшем без труда их удалить, например.
Да и всем будет понятно, зачем эти констрейнты были сделаны.
7 авг 09, 09:11    [7509056]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
iap,

ну автор просто хотел юникальность :)
7 авг 09, 09:20    [7509085]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
ребята а почему не получается вот так

create table firm2
(id int identity primary key,
lname varchar(20) not null,
constraint fk foreign key references firm (id)
)

хачу чтоб id был уникальный в двух таблицах
7 авг 09, 09:42    [7509139]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
может тебя нужно отношения один ко многим?


----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 09:49    [7509163]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
непонял я только учусь мне если не трудно кто знанает как сделать так чтоб id был уникальным в двух таблицах и ставился автамотически с помощью identity код бы посмотреть?
7 авг 09, 09:53    [7509177]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
то что ты говориш сделать не проблема но так как хочеш учиться тогда давай по порядку...
зачем тебя два одинаковых таблиц с разными именами?

----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 09:55    [7509185]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
и ешё какую структуру хочеш создать?

----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 09:56    [7509190]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
я просто хачу сделать id уникальным по всей базе и чтоб не парится чтоб он ставился автоматически (identity)
7 авг 09, 10:00    [7509203]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
пока честно не могу дагнать для чего нужен FOREIGN KEY
первичный понимаю так дапустим чтоб нельзя было вносить одиноковые имена фамилия числа а
FOREIGN KEY ?
7 авг 09, 10:05    [7509224]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Alexey_Cher,
я же сказал это делать не проблема вот:
CREATE TABLE [dbo].[firm] (
  [id] int IDENTITY(1, 1) NOT NULL,
  [fname] varchar(15) NOT NULL,
  PRIMARY KEY CLUSTERED ([id])
)
GO

табле 2 точно такой же...

но ты не ответил зачем тебя firm2 ... может в firm1 добавить поле lname ?

----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 10:06    [7509229]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Alexey_Cher
ребята а почему не получается вот так

create table firm2
(id int identity primary key,
 lname varchar(20) not null,
constraint fk foreign key(id) references  firm (id) 
)
Потому что надо задать поле в FOREIGN KEY?
7 авг 09, 10:09    [7509246]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Alexey_Cher,

----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 10:09    [7509249]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
Ramin
Alexey_Cher,
я же сказал это делать не проблема вот:
CREATE TABLE [dbo].[firm] (
  [id] int IDENTITY(1, 1) NOT NULL,
  [fname] varchar(15) NOT NULL,
  PRIMARY KEY CLUSTERED ([id])
)
GO

табле 2 точно такой же...

но ты не ответил зачем тебя firm2 ... может в firm1 добавить поле lname ?

----
www.hramin.jino-net.ru
Картинка с другого сайта.


почему то у меня id одинаковый в двух таблицах
7 авг 09, 10:24    [7509335]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Alexey_Cher,
и что? ты сам да поставил?
ты не отвечаеш на вопросы, и так испытываеш терпение людей...... сперва нужно знать что нужно делать, потом исходя от этого создать структуру базы, потом уже определиться как это делать... ты на слепой что то там делаеш и не отвечаеш на вопросы тем кто хочет тебя помоч.

----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 10:29    [7509370]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexey_Cher
кто знанает как сделать так чтоб id был уникальным в двух таблицах и ставился автамотически с помощью identity код бы посмотреть?

С помощью identity так не сделать. И вообще с помощью стандартных средств нельзя не сделать генератора последовательности для базы.
7 авг 09, 10:31    [7509384]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
спасибо за помощ пока тяжеловато идет обучение может поэтому не всегда точно удается все сформулировать пока запутался в этих ключах уже около недели разбираюсь
может скажите в двух словах для чего он нужен foreign key а то в книгах все запутано.
7 авг 09, 10:38    [7509431]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
внешный ключ используется что б сохранить целостность базы данных. Пример:
Есть клиенты и есть счета этих клиентов, надо создать БД для учета клиентов и их счетов.
Так как счет не может быть открыт без клиента значит для каждого счета нужно прикрепить клиента. Что б ошибочна не открыли счет без клиента ему прикрепляется внешний ключ.


----
www.hramin.jino-net.ru
Картинка с другого сайта.
7 авг 09, 10:48    [7509495]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alexey_Cher
спасибо за помощ пока тяжеловато идет обучение может поэтому не всегда точно удается все сформулировать пока запутался в этих ключах уже около недели разбираюсь
может скажите в двух словах для чего он нужен foreign key а то в книгах все запутано.

Вам наверное нужно начать с азов теории баз. С нормальных форм, например. Там эти понятие объяснены независимо от платформы.
7 авг 09, 10:50    [7509510]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Alexey_Cher
может скажите в двух словах для чего он нужен foreign key а то в книгах все запутано.
Я Вам больше двух слов написал об этом, не правда ли?
Что такое BOL знаете? Helpом когда-нибудь пользовались?
7 авг 09, 10:52    [7509516]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста  [new]
Alexey_Cher
Member

Откуда:
Сообщений: 15
Ramin
внешный ключ используется что б сохранить целостность базы данных. Пример:
Есть клиенты и есть счета этих клиентов, надо создать БД для учета клиентов и их счетов.
Так как счет не может быть открыт без клиента значит для каждого счета нужно прикрепить клиента. Что б ошибочна не открыли счет без клиента ему прикрепляется внешний ключ.


----
www.hramin.jino-net.ru
Картинка с другого сайта.


Ramin спасибо большое можно вас попрасить написать мне правильный код с использованием первичного и внешнего ключа .
7 авг 09, 10:57    [7509541]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить