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

Откуда:
Сообщений: 18
Здравствуйте. У меня для всех столбцов в таблице первичные ключи генерируются с помощью
identity
, причем у всех столбцов
identity
стоит без параметров, т.е. начальное значение 1 и шаг 1. Подскажите, это может в дальнейшем привести к путанице и нужно ли делать так, чтобы у каждого такого столбца были свои уникальные параметры (т.е. разные начальные значения и разные шаги, например)
21 мар 12, 10:44    [12286048]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35381
Блог
c1be
нужно ли делать так, чтобы у каждого такого столбца были свои уникальные параметры (т.е. разные начальные значения и разные шаги, например)


как правило (в 99% случаях) - не нужно
21 мар 12, 10:46    [12286067]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
В 99.9% не нужно
21 мар 12, 14:01    [12287989]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
c1be
Member

Откуда:
Сообщений: 18
Я немного неправильно сформулировал вопрос - первичные ключи с помощью identity создаются не в одной таблице, а во многих таблицах моей базы данных (т.е. если в таблице есть лишь один столбец-первичный ключ, то он заполняется с помощью identity). И везде identity стоит без параметров, т.е. начальное значение 1 и шаг 1. В этом случае нужно ли делать так, чтобы у каждого такого столбца были свои уникальные параметры (т.е. разные начальные значения и разные шаги, например)?
25 мар 12, 10:54    [12309293]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
c1be
у каждого такого столбца были свои уникальные параметры (т.е. разные начальные значения и разные шаги, например)?


ээээ, зачем?
25 мар 12, 11:00    [12309304]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
c1be
Member

Откуда:
Сообщений: 18
Ну не знаю, может это в каких то ситуациях пригодится
25 мар 12, 11:59    [12309449]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
qwerty112
Guest
c1be
Ну не знаю, может это в каких то ситуациях пригодится

в каких ?
придумайте две ...
25 мар 12, 12:58    [12309589]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
JaneKate
Member

Откуда:
Сообщений: 81
qwerty112
c1be
Ну не знаю, может это в каких то ситуациях пригодится

в каких ?
придумайте две ...

1. Репликация.
2. Таблица, в которой будут в одном поле собираться ПК из 2-х или более других таблиц.
1 апр 12, 00:18    [12346421]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
JaneKate
qwerty112
пропущено...

в каких ?
придумайте две ...

1. Репликация.
2. Таблица, в которой будут в одном поле собираться ПК из 2-х или более других таблиц.


1. Зачем это при репликации?
Там триггер просто копирует все изменения в другую БД.

2. А здесь- то чем помешает объединить два ключа?
4 апр 12, 12:06    [12363093]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
qwerty112
c1be
Ну не знаю, может это в каких то ситуациях пригодится

в каких ?
придумайте две ...


Пригодиться может, если начальные значения ключа хочется зарезервировать для служебных целей. Вроде того, что записи с ключом 1, 2, ... 10 - не троньте.
4 апр 12, 12:08    [12363106]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Kyubee
Member

Откуда:
Сообщений: 125
>1. Репликация.
uniqueidentifier
>2. Таблица, в которой будут в одном поле собираться ПК из 2-х или более других таблиц.
1) составные pk - зло
2) что такое "вторых таблиц"?
4 апр 12, 12:14    [12363175]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Kyubee
1) составные pk - зло
O_o
4 апр 12, 12:29    [12363322]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Dzianis
Member

Откуда:
Сообщений: 81
Kyubee
>2. Таблица, в которой будут в одном поле собираться ПК из 2-х или более других таблиц.

так такую связь разве SQL сервер обеспечит?
это будет программная развязка. А раз программная то какую логику проверки захотите, ту и реализуете.
по сути проблемы будут только:
1) при репликации 2х активных копий баз (не помню как это правильно называется)
2) при реально большом количестве записей когда будет исчерпана разрядность поля.
4 апр 12, 12:51    [12363483]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Dzianis
Kyubee
>2. Таблица, в которой будут в одном поле собираться ПК из 2-х или более других таблиц.

так такую связь разве SQL сервер обеспечит?
А как же, очень распространённый вариант.
4 апр 12, 13:43    [12363927]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Dzianis
по сути проблемы будут только:
2) при реально большом количестве записей когда будет исчерпана разрядность поля.
Вообще разрядность полей выбирается так, что бы они не переполнялись.
4 апр 12, 13:45    [12363948]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Dzianis
Member

Откуда:
Сообщений: 81
alexeyvg
Dzianis
так такую связь разве SQL сервер обеспечит?
А как же, очень распространённый вариант.

Можно пример для самообразования? (или sql скрипт)

если на поле завести FOREIGN KEY из 2х таблиц (для примера)
то наличие внешнего ключа будет проверяться и там и там.

как я понимаю предыдущие посты, там предполагается что ключ (ID) или оттуда или отсюда. Что в рамках FOREIGN KEY не сработает, только программный контроль целостности
4 апр 12, 15:53    [12365228]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
Dzianis
alexeyvg
пропущено...
А как же, очень распространённый вариант.

Можно пример для самообразования? (или sql скрипт)
Да, ошибся, думал про другое :-(
4 апр 12, 16:03    [12365308]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
iljy
Member

Откуда:
Сообщений: 8711
Dzianis,

делаются вычисляемые поля, по одному на каждую возможную таблицу ПК, и уже на них вешаются ВК.
4 апр 12, 19:09    [12366864]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Dzianis
Member

Откуда:
Сообщений: 81
iljy
Dzianis,

делаются вычисляемые поля, по одному на каждую возможную таблицу ПК, и уже на них вешаются ВК.

тогда смысл сводить ID в одно поле чтобы потом все равно развести ID (и FK) по отдельным вычисляемым полям, по одному на каждую возможную таблицу?
+ для разделения ID по вычисляемым полям, чисто ID не достаточно, необходим дополнительный признак к какой таблице эта связь
+ вычисляемое поле в данном случае это уже условие, а значит контроль целостности уже становится программным, а не возложен целиком и полностью на СУБД.

Остается вопрос, для какой цели ТС хочет такой результат.
5 апр 12, 12:05    [12369612]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Dzianis
+ для разделения ID по вычисляемым полям, чисто ID не достаточно, необходим дополнительный признак к какой таблице эта связь
Зачем?
Dzianis
+ вычисляемое поле в данном случае это уже условие, а значит контроль целостности уже становится программным, а не возложен целиком и полностью на СУБД.

use tempdb;
go
create table dbo.TblMaster
(
 master_id int not null primary key,
);
go
create table dbo.TblSlave
(
 slave_id int not null primary key,
 master_id as slave_id + 10 persisted references dbo.TblMaster (master_id)
);
go
drop table dbo.TblSlave;
drop table dbo.TblMaster;
go
5 апр 12, 12:25    [12369698]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
iljy
Member

Откуда:
Сообщений: 8711
Dzianis
iljy
Dzianis,

делаются вычисляемые поля, по одному на каждую возможную таблицу ПК, и уже на них вешаются ВК.

тогда смысл сводить ID в одно поле чтобы потом все равно развести ID (и FK) по отдельным вычисляемым полям, по одному на каждую возможную таблицу?

Вопрос проектирования. Я сталкивался с ситуациями, когда такое представление удобнее на уровне клиента.

Dzianis
+ для разделения ID по вычисляемым полям, чисто ID не достаточно, необходим дополнительный признак к какой таблице эта связь

Либо разделение на диапазоны.

Dzianis
+ вычисляемое поле в данном случае это уже условие, а значит контроль целостности уже становится программным, а не возложен целиком и полностью на СУБД.

Че??

Dzianis
Остается вопрос, для какой цели ТС хочет такой результат.

Его и надо об этом спросить.
5 апр 12, 12:31    [12369716]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Dzianis
Member

Откуда:
Сообщений: 81
invm,

пример не до конца подходящий. Нет 2х связей.

iljy
Dzianis
Остается вопрос, для какой цели ТС хочет такой результат.

Его и надо об этом спросить.

К его ветке и озвучен вопрос.
5 апр 12, 12:59    [12369911]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Dzianis
invm,

пример не до конца подходящий. Нет 2х связей.
И что же изменит 2-я или N-я связь?
5 апр 12, 13:03    [12369924]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
Dzianis
Member

Откуда:
Сообщений: 81
Наличие нескольких связей означает что в одном случае надо контролировать целостность в одной таблице, а при другом ID в другой. Критерием в какой таблице контролировать может служить или дополнительный признак или допустим по диапазонам. Но в любом случае без условия не обойтись.
Для такого варианта "или туда или туда" вычисляемое поле я вижу вот таким, с условием.
create table dbo.TblMaster
(
 master_id int not null primary key,
);
go
create table dbo.TblMaster2
(
 master_id int not null primary key,
);
go
CREATE TABLE [dbo].[TblSlave](
	[slave_id] [int] NOT NULL,
	[master_id]  AS (case when [entity]=(1) then [slave_id]+(10)  end) PERSISTED,
	[Entity] [int] not null,
	[master_id2]  AS (case when [entity]=(2) then [slave_id]+(10)  end) PERSISTED,
PRIMARY KEY CLUSTERED (	[slave_id] ASC))
GO
ALTER TABLE [dbo].[TblSlave]  WITH CHECK ADD FOREIGN KEY([master_id])
REFERENCES [dbo].[TblMaster] ([master_id])
GO
ALTER TABLE [dbo].[TblSlave]  WITH CHECK ADD FOREIGN KEY([master_id2])
REFERENCES [dbo].[TblMaster2] ([master_id])
GO
5 апр 12, 13:18    [12370009]     Ответить | Цитировать Сообщить модератору
 Re: Создание первичных ключей  [new]
iljy
Member

Откуда:
Сообщений: 8711
Dzianis
Наличие нескольких связей означает что в одном случае надо контролировать целостность в одной таблице, а при другом ID в другой. Критерием в какой таблице контролировать может служить или дополнительный признак или допустим по диапазонам. Но в любом случае без условия не обойтись.
Для такого варианта "или туда или туда" вычисляемое поле я вижу вот таким, с условием.

И что? Наличие декларативного условия делает связь неконтроллируемой сервером?
5 апр 12, 13:27    [12370077]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить