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

Откуда:
Сообщений: 4
Не понимаю, что означают двойные связи между таблицами "Гражданин" - "Персональные данные" и "Гражданин" - "Личное дело".

есть только картинка, пытаюсь воссоздать базу.
Странно, что от таблицы "Персональные данные" идет две связи от ключевого поля, причем одна "один-ко-многим", а вторая "один-к-одному".
подскажите пожалуйста, заранее спасибо

К сообщению приложен файл. Размер - 143Kb
16 сен 15, 01:45    [18154139]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста начинающему, что за двойные связи между таблицами  [new]
MangusJR
Member

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

Я даже не знаю смеяться или плакать :)

Это не две связи - это одна, которая проходит за таблицей.
16 сен 15, 05:13    [18154212]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста начинающему, что за двойные связи между таблицами  [new]
надо больше гуидов
Guest
mishanya94,

пацики, для идентификации записи действительно нужен "уникальный идентификатор".
при этом тип данных "uiniqueidentifier" - это на самом деле не оно. не надо видеть дословный перевод и тулить куда ни попадя.
это специальный тип данных, который GUID, т.е. GLOBAL unique identifier, который нужен для специальных ситуаций.
например, если у вас по всей стране или планете толпы серверов стоят, везде кто-то что-то вводит, identity колонки отличаются (и всех это устраивает), но как-то надо понять, одна и та же это строчка или нет.
есть другие ситуации, когда, опять же, нужен "специальный, заведомо, гарантированно уникальный" буквенно-цифровой идентификатор. например, если вам необходимо генерить в рантайме объекты в достаточно широкой области видимости и собственное чудо-изобретение генерилки рандомных названий будет долго, криво, никому не нужно, непонятно как поддерживаемо, а тут - механизм, который гарантированно будет выдавать всегда уникальные последовательности.

при этом выплевывает этот механизм (генератор guid'ов) такой результат, который сложно назвать "равномерно наращиваемым".
а кластерный индекс, который обычно строится по PK, он на последовательность записей влияет. и со случайно возникаемым гуидом, новые записи будут добавляться то в конец, то впихиваться в середину или в самое начало. это приведет и к падению скорости вставки, и чтению ничем не поможет.

"уникальный идентификатор" записи - это значение ячейки столбца, которое в этом столбце больше не встречается и позволяет по известному ключу (идентификатору) однозначно идентифицировать конкретную (уникальную) строку.
какой это тип данных? да хоть какой. хоть строка. но в разумных подходах чаще всего используется номинально подходящий под большинство ситуаций - int.
...
ID int identity(1,1) not null,
..,
primary key clustered PK_ID (ID)
...

уникальный, автоматически присваиваемый, последовательно наращиваемый, 4 байта против 16 байт в гуиде.


тип данных uniqueidentifier - это просто тип данных формата 4инта, отображаемых в виде {0E984725-C51C-4BF4-9960-E1C80E27ABA0}.
уникален не тип данных, а результат функции генерации гуида. на колонку уникальность автоматом не наложится. ее точно так же как с любым другим типом данных нужно еще сделать уникальной (PK или UQ констрейнтом). и значение туда автоматом складываться тоже никакое сразу не начнется. для этого нужно прописать дефолт newid().
т.е. сделать все то же самое, что и с колонкой любого другого типа

uniqueidentifier - это просто "какой-то" тип данных. как varchar, int, float. он не является "специальным типом данных чтобы делать в таблицах колонки уникальных идентификторов".
уникальность делается не этим типом данных, а констрейнтом. без констрейнта и в гуид колонку можно сколько угодно одинакового напихать - это просто тип данных, а не магия уникальности.
16 сен 15, 09:02    [18154404]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста начинающему, что за двойные связи между таблицами  [new]
mishanya94
Member

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

Спасибо, это гениально!)
16 сен 15, 10:19    [18154684]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста начинающему, что за двойные связи между таблицами  [new]
mishanya94
Member

Откуда:
Сообщений: 4
надо больше гуидов,

Спасибо за полезную инфу
16 сен 15, 10:19    [18154687]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите пожалуйста начинающему, что за двойные связи между таблицами  [new]
Gluck_13
Member

Откуда: Санкт-Петербург
Сообщений: 207
Интересная структурка. А в чем задача?
18 сен 15, 12:13    [18164825]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить